【问题标题】:PreventDefault not working after checkbox "onchange"复选框“onchange”后,PreventDefault 不起作用
【发布时间】:2019-02-21 11:59:56
【问题描述】:

我正在我的模态中开发签名板 jQuery 插件。我必须通过我的签名批准处方。我还有一个用于默认签名的复选框。如果我在目录中有任何签名图像,它将在模式上显示该图像,默认复选框“选中”。 有两种可能性,要么我有默认签名,要么没有: 1.使用默认签名 2. 取消选中复选框并添加新签名。 在任何情况下如果签名板为空,表单将不会提交并会提示错误消息。

我的 onchange 功能有问题,当我将复选框状态更改为“取消选中”时,会显示签名板 div,如果我将其保持为空并按下保存按钮,它会提示我一条错误消息。但是,当我再次“选中”和“取消选中”复选框时,“PreventDefault”功能不起作用,并且提交的表单带有任何空的签名板。

我的 JavaScript 代码:

$('.already_signed').change(function(event) {
    if (this.checked) {
        $('.sign').hide(); // hide signaturepad
        $(".already_signed").attr("checked", true); // checked the checkbox
         $('.default_img').show(); // show the default image
        document.getElementById('save').addEventListener("click", function (event) {
            $('#sign_image').val(''); // if form is submitted with default signature keep the signature-pad hidden image input empty  
            document.getElementById('signature_alert').style.display = 'none'; // hide the error message as well
            $('#signature_form').submit();
          });

    } else {
        $('.sign').show(); // show signature-pad
        $(".already_signed").attr("checked", false); // unchecked the checkbox
        $('.default_img').hide(); // hide the default image

                             // jquery signature

          var wrapper = document.getElementById("signature-pad"),
          clearButton = wrapper.querySelector("[data-action=clear]"),
          savePNGButton = wrapper.querySelector("[data-action=save-png]"),
          saveSVGButton = wrapper.querySelector("[data-action=save-svg]"),
          canvas = wrapper.querySelector("canvas"),
          signaturePad;
          signaturePad = new SignaturePad(canvas);

          document.getElementById('save').addEventListener("click", function (event) {

                if (signaturePad.isEmpty()) {
                    event.preventDefault();
                    var timePeriodInMs = 3000;

                    setTimeout(function() 
                    { 
                        document.getElementById("signature_alert").style.display = "none"; 
                    }, 
                    timePeriodInMs);
                  document.getElementById('signature_alert').style.display = 'block';
                }

                document.getElementById('signature_image').src = signaturePad.toDataURL(); 
                var image =   document.getElementById('signature_image').src;
                document.getElementById('sign_image').value = image;  
          });
    }
});

我也把return false,但是还是表单提交了。 我严重陷入困境,如果你们中的任何人能帮助/指导我,我将不胜感激。 谢谢,

【问题讨论】:

  • 如果未选中复选框,则禁用提交按钮。
  • 我无法禁用它,因为如果复选框被“取消选中”,我将不得不在签名板上签名,然后提交带有新签名图像的表单。
  • 使用 onBegin 选项重新启用按钮github.com/szimek/signature_pad
  • Habib 能否请您进一步指导我?我的意思是在哪里使用 onBegin?
  • 我已添加到答案中......请检查......

标签: javascript jquery onchange preventdefault


【解决方案1】:

尝试在未选中复选框时禁用按钮,并在用户开始在板上书写时启用按钮。

$('.already_signed').change(function(event) {
if (!$("#checkbox").is(":checked")) {
$('input[type=submit]').attr('disabled', 'disabled');
}
});
var canvas = document.querySelector("canvas");

var signaturePad = new SignaturePad(canvas);
signaturePad.onBegin({$('input[type=submit]').removeAttr('disabled');});

【讨论】:

  • 谢谢,我已经检查了文档,并在那里找到了线索。但是我有一个问题,如果用户在签名板上签名然后清除签名板会发生什么。因为笔画将启用按钮,但签名板仍然是空的。
猜你喜欢
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 2020-05-03
  • 2013-12-22
相关资源
最近更新 更多