Передача переменной из встроенного Javascript в обработчик кликов в отдельном файле

У меня есть встроенный javascript для использования Signature Pad https://github.com/szimek/signature_pad Это выглядит как это:

var signaturePad = new SignaturePad(canvas, {
  backgroundColor: 'rgb(255, 255, 255)'
});
clearButton.addEventListener("click", function (event) {
  signaturePad.clear();
});

И в нижнем колонтитуле у меня есть отдельный файл click.js

$('.send-signature').on( 'click', function( event ) {
        event.preventDefault();
        console.log(event);
        var $button = $(this);
        $button.prop("disabled",true);
        if (signaturePad.isEmpty()) {
            alert("Please provide a signature first.");
            return false;
        } 

} );

Когда я нажимаю кнопку, я получаю: Uncaught ReferenceError: signalPad не определен

Если я нажимаю кнопку очистки, все работает нормально. Я не могу понять, в чем проблема и как мне передать signPad обработчику кликов.

Click.js находится под встроенным кодом JavaScript.

Я пробовал много разных решений, но я думаю, что это самое далекое, что я продвинулся. Может ли кто-нибудь указать мне правильное направление и сказать, почему это не работает?


person E-g    schedule 18.09.2019    source источник
comment
Если var signaturePad находится внутри обработчика события загрузки, он не будет находиться в области действия снаружи. Попробуйте объявить var signaturePad вне всего скрипта, а затем измените на signaturePad = new SignaturePad(canvas, { backgroundColor: 'rgb(255, 255, 255)' });, где у вас сейчас есть var   -  person mplungjan    schedule 18.09.2019


Ответы (2)


Вы можете сохранить переменную signalPad в объекте окна

window.signaturePad = new...

а затем получить к нему доступ таким же образом

window.signaturePad.isEmpty()

это не самый красивый способ сделать javascript, но я думаю, что это нормально для вашей цели.

person Simon    schedule 18.09.2019
comment
Спасибо, работает отлично! Теперь мне просто любопытно, почему это не работает без этого, у вас есть идеи? - person E-g; 19.09.2019

Можете ли вы попробовать добавить это прямо под строку clearButton? Кроме того, возможно, измените подпись отправки на формат addListener и посмотрите, изменит ли это что-нибудь.

$('.send-signature').on( 'click', function( event ) {
    event.preventDefault();
    console.log(event);
    var $button = $(this);
    $button.prop("disabled",true);
    if (signaturePad.isEmpty()) {
        alert("Please provide a signature first.");
        return false;
    } 

} );
person zakariah1    schedule 18.09.2019