7

aタグがある場合:

<a id="delete-event" href="/delete/1234">Delete</a>

そして、削除を確認するように促すいくつかのjavascript:

 $("#delete-event").click(function(e) {
    e.preventDefault();

    bootbox.confirm("Are you sure you wish to delete this?", function(confirmed) {
        if(confirmed) {
            return true;
        }
    }); 
});

私はそうすることで発砲e.preventDefault()を防ぐことができると思いましたが、そうではありません。a hrefタグをクリックすると、JavaScriptを実行せずにURLに移動します。どうすればこれを機能させることができますか?

ありがとう。

4

5 に答える 5

15

このコードは機能します:

return true完了した後にリンクが起動することをただ期待することはできませんe.preventDefault()。あなたbootbox.confirm()をJS確認に置き換える必要がありましたが、それでも機能するはずです。

$("#delete-event").click(function(e) {
    e.preventDefault();
    var a = confirm("yes?");
    if(a) window.location = $('#delete-event').attr('href');
});​

デモ

コード ブロックを上で提供したものに置き換えてみてください。それが機能する場合は、bootbox確認を元に戻して、もう一度やり直してください。それはエラーがどこにあるかを教えてくれます。

于 2012-07-08T00:44:14.537 に答える
6

必要な場合にのみ防止することをお勧めします。たとえば、ユーザーが確認ボックスから [キャンセル] を選択した場合、デフォルトを防止します。

$("#delete-event").click(function(e) {
    if (!confirm('Are you sure you wish to delete this?')) {
        e.preventDefault();
    } 
});​

デモ: http://jsfiddle.net/SCCDX/

通常、確認が必要な場合はこれが最善の方法であり、フォームを送信する前の確認にはイベントの方が便利です。

確認を求めたときに、ブートボックスがブラウザの動作を複製するかどうかはわかりません。したがって、このシナリオでは機能しない可能性があります。その場合、より良いアプローチは、どこかにフラグを設定することです。

$("#delete-event").click(function(e) {
    if (!$(this).data('confirmed')) {
       e.preventDefault()
    } else {
       bootbox.confirm("Are you sure you wish to delete this?", function(confirmed) {
          if(confirmed) {
              $(this).data('confirmed', 1).click();           
          }
       });        
    }
});​

// Disclaimer: This code is untested. clicking on the link may cause data loss. lol 

どういうわけか、window.location メソッドが好きではありません。この要素に関連付けられている他のイベントが失敗する可能性があるためです。

于 2012-07-08T01:27:48.453 に答える
0

このコードを試してください:

$(".SelectedPassengers").each(function () {
            debugger;

        if ($(this).text() == "") {
            debugger;
            var id = this.id.split('-');
            alert("Please Select Passenger " + id[1]);
            var h = "" + this.id;
          // $(this).preventDefault();
           //$('#' + h).focus();
           //this.preventDefault();
           stopEvent = "enter";
        }

    });
    if (stopEvent != "") {
        stopEvent = "";
        event.preventDefault();
        return false;
    }
于 2015-11-21T07:57:49.997 に答える
0

return false;アンカータグに必要です。

この jsFiddleを参照してください。

于 2012-07-08T00:36:04.720 に答える