почему не работает скрипт 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 шт):
Всё работает, как должно:
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); ">
Всё очень просто. Вы добавили 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()
перепробовал по всякому, не работает и всё) Хоть с window, хоть без него.
Сделал старым дедовским способом. Учитывая то, что данные динамические и на момент загрузки страницы отсутствуют обращаюсь к $(document):
$(document).on('keyup', '#swal-input3', function(){
var data = $(this).val().replace(/[^\d]/g,'');
$(this).val(data);
$('#pym').html(data);
})