javascript - jQuery点击事件触发$.confirm堆叠事件

标签 javascript jquery jquery-confirm

我想要一个按钮在单击或在焦点上按下回车键时提交表单,但在我想显示确认警报之前使用 jquery-confirm 向用户显示一些信息,当他接受模式时,目标表单必须提交。

出于某种原因,当我第一次确认时是可以的,但是当我第二次确认时 $.confirm 看起来是堆叠的,然后显示两次,确认后如果我再次点击它显示 3 次...为什么会这样?

我正在使用数据属性来选择元素加表单目标,我的代码有一个小问题:

https://jsfiddle.net/z3mn21dz/7/

注意:我不想四处走走,我知道有很多可能的选择,但我想知道哪里出了问题。

HTML

<button data-role="confirm" data-target="target">
  Submit
</button>

<h1>Form to submit</h1>
<form action="" id="target"><input type="text"></form>

JS/jQuery

$(document).ready(function($){

$('[data-role="confirm"]').on('keyup click', function (e) {
        e.preventDefault();
    var target = $(this).data('target');

    if(e.keyCode == 13 || e.type == "click")
    {
    $(this).confirm({
      title: 'Confirm!',
      content: 'Simple confirm!',
      buttons: {
          confirm: function () {
              $.alert('Confirmed!');
          },
          cancel: function () {
              $.alert('Canceled!');
          },
          somethingElse: {
              text: 'Something else',
              btnClass: 'btn-blue',
              keys: ['enter', 'shift'],
              action: function(){
                  $.alert('Something else?');
              }
          }
      }
    });
    }

})
});

最佳答案

在您的 fiddle 中更新了您的整个 JS 代码,如下所示,它似乎工作正常。附言脚本 $(this).confirm({ 的第 9 行已更改为 $.confirm({

$(document).ready(function(){

    $('[data-role="confirm"]').on('keyup click', function (e) {
            e.preventDefault();
        var target = $(this).data('target');

        if(e.keyCode == 13 || e.type == "click")
        {
        $.confirm({

          icon: 'fa fa-exclamation-triangle',
          confirmButton: 'bestätigen',
          confirmButtonClass: 'btn btn-danger',
          cancelButton: 'abbrechen',
          confirm: function(ee){
             $( "#"+target ).submit();
          }
        });
        }

    })
});

更新 Javascript部分更新为

$(document).ready(function($){


    $('[data-role="confirm"]').on('keyup click', function (e) {
            e.preventDefault();
        var target = $(this).data('target');

        if(e.keyCode == 13 || e.type == "click")
        {
        $.confirm({
          title: 'Confirm!',
          content: 'Simple confirm!',
          buttons: {
              confirm: function () {
                  $.alert('Confirmed! Target: '+target);
              },
              cancel: function () {
                  $.alert('Canceled!');
              },
              somethingElse: {
                  text: 'Something else',
                  btnClass: 'btn-blue',
                  keys: ['enter', 'shift'],
                  action: function(){
                      $.alert('Something else?');
                  }
              }
          }
        });
        }

    })
});

出现堆栈的原因是您使用的是 $(this).confirm 而不是 $.confirm。也就是说,confirm 函数与 JQuery 相关联,并且由于您使用了 this,所以它一开始就没有被绑定(bind)。其次,confirm 的语法需要按钮来执行以前也缺少的必要操作。希望这能澄清。

关于javascript - jQuery点击事件触发$.confirm堆叠事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43674314/

相关文章:

javascript - raphael js 中面积图的工具提示问题

laravel - 在 laravel 5.5/vue.js 应用程序中使用 jquery-confirm 库

javascript - 存储 HTML 所见即所得编辑器数据

javascript - Firebase JSON 数据组成数组

javascript - Html 链接在某些点击时未注册

javascript - 使用 jQuery 根据其 data-* 属性显示/隐藏内容

javascript - 如何在带有div父级的表中查找文本

javascript - $HTTP_RAW_POST_DATA 错误 - 未发布数据

javascript - 内联样式不适用于动态创建的输入