0

这是我想要做的:我有这个处理链接点击的处理程序:

$('body').on('click', 'a.ajax.get', function(e){
    e.preventDefault();
    $.get($(this).attr('href'), function(){alert('Success!');});
});

后来我创建了这个处理程序,所以我可以在操作发生之前要求用户确认:

$('body').on('click', 'a[data-confirmation]', function(){
   return confirm($(this).data('confirmation'));
});

这个处理程序放在我脚本的顶部

导致我出现问题的标记是这样的:

<a href="do/something/there" class="ajax get" data-confirmation="Are you sure you want to do that?">
    Click me!
</a>

我认为它会做的是,当用户在确认框中单击“取消”时,回调将返回false,事件链将停止。这不会发生,无论用户在确认框中选择什么,链接都会被“点击”。

我做错了什么,或者这是不可能的?

4

2 回答 2

1

试试这个

$('body').on('click', 'a[data-confirmation]', function(e) {
    var check = confirm($(this).data('confirmation'))
    if (!check) {
        e.preventDefault();
    }
    else {
        $.get($(this).attr('href'), function() {
            alert('Success!');
        });
    }
});​

检查小提琴

单击取消按钮时未发送请求

更新的小提琴

于 2012-09-26T07:14:04.370 回答
1

您可能最好将所有内容压缩为一个函数,只需检查当前单击的元素是否具有该data-confirmation属性,如果是,则显示确认(并处理它!)

$(document).ready(function() {

  $('body').on('click', 'a.ajax.get', function(e) {     
    if($(this).data('confirmation') !== undefined) { 
      if(!confirm($(this).data('confirmation'))) {
        e.preventDefault(); return false;
      }
    }

    $.get($(this).attr('href'), function(){
      alert('Success!');
    }); 
  });

});

这是一个小提琴

于 2012-09-26T07:37:39.673 回答