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 に答える