почему не работает скрипт js?

есть js:

function Pympym(data){
    console.log(data);
    $('#pym').html(data);
}

<input id="swal-input3" class="swal2-input" onkeyup = "this.value = this.value.replace(/[^\\d]/g,\'\'); Pympym(this.value); " >'

Первая часть onkeyup this.value = this.value.replace(/[^\\d]/g,\'\'); работает, а вторая нет. На функцию Pympym вообще говорит, что она not defined. Как я понимаю, вопрос в области видимости функции Pympym. Её надо сделать видимой для onkeyup. Прошу помощи)

=======================

вобщем должно работать, но не работает) Вот часть кода вырезнання из файла

$(document).ready(function () {
.....
    function pympym(data){
        console.log(data);
        $('#pym').html(data);
    }

    $('#51').on('click', async function () {

        const ipAPI = '/site/gshu'
        Swal.queue([{
                title: 'Создать ссылку',
                html:
                        '<select id="swal-select1" class="swal2-select">' + Panel.tpr_options + '</select>' +
                        '<select id="swal-select2" class="swal2-select">' + Panel.act_options + '</select>' +
                        '<input id="swal-input3" class="swal2-input" onkeyup = "this.value = this.value.replace(/[^\\d]/g,\'\'); pympym(this.value); " >' +
                        '<div id = "pym"></div>',
                focusConfirm: false,
                confirmButtonText: 'Генерировать',
                confirmButtonColor: '#f7cd0099',
                customClass: {popup: 'my_swal_ok'},
//                showLoaderOnConfirm: true,
                preConfirm: () => {
.....

ошибок у меня нет в файле и функция объявлена до её вызова. Полный тест ошибки при событии keyup: "VM811:2 Uncaught ReferenceError: pympym is not defined at HTMLInputElement.onkeyup (:2:47)". как бы всё банально и просто, но...


Ответы (3 шт):

Автор решения: UModeL

Всё работает, как должно:

function Pympym(data) {
  console.log(data);
  $('#pym').html(data);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="swal-input3" class="swal2-input" onkeyup="this.value = this.value.replace(/[^\d]/g,''); Pympym(this.value); ">

→ Ссылка
Автор решения: Aziz Umarov

Всё очень просто. Вы добавили Pympym скрипт где-то подальше и он не виден либо есть ошибка в скрипте до определения функции.

переместите его так чтоб во время запуска было видно.

Тест для примера отложенной занрузки.

setTimeout(()=>{
eval(`
console.log("test");
  window.Pympym =
  function (data) {
    console.log(data);
    $('#pym').html(data);
}`)}, 5000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="swal-input3" class="swal2-input" onkeyup="this.value = this.value.replace(/[^\d]/g,''); Pympym(this.value); ">

Зачем я создал свойство у window

function sayHello(){ console.log("hello")};

console.log(window["sayHello"]);

window["sayHello"]()

window["sayHello"] = () => {console.log("hello and bye")}

sayHello()

→ Ссылка
Автор решения: Oughtem

перепробовал по всякому, не работает и всё) Хоть с window, хоть без него. Сделал старым дедовским способом. Учитывая то, что данные динамические и на момент загрузки страницы отсутствуют обращаюсь к $(document):

$(document).on('keyup', '#swal-input3', function(){
    var data = $(this).val().replace(/[^\d]/g,'');
    $(this).val(data);
    $('#pym').html(data);
})
→ Ссылка