1

テーブルがあり、各行に一意のIDが割り当てられているので、行をクリックしてjqueryで取得し、その行のデータを編集できます。便利なように行全体をクリックするのが好きで、ユーザーにとっては簡単です。

最後の列には、その行を削除するためにクリックできるようにしたいXがあります。繰り返しになりますが、各行を識別できるように一意のIDがあります。私のjqueryは次のようになります。

    $('.delrow').click(function(e) {
    e.preventDefault();
    var id = $(this).attr('id');
    id = id.substr(3);
    if (confirm('Are you sure you want to delete this row?')) {
        $.ajax({
            url: "/rowdelete/?delid="+id,
            success: function(data) 
            {
                location.href="/";
            }
        });
    } else {
        return false;
    }   

});

これにより、行が削除され、ホームページに戻るはずです。行クリックのデフォルトのアクションはまさにそれを行うことだったので、行を削除してから、行IDがnullの編集モジュールに進みます。この時点で、preventDefaultはフォームアクションにのみ適用されるため、この場合は機能しないと思います。デフォルトの行クリックアクションをオーバーライドするにはどうすればよいですか?

ありがとう!

4

2 に答える 2

2

の代わりにe.preventDefault()、を使用しますe.stopPropagation()。簡単。

編集:今は電話を使って応答していないので、もう少し追加したいと思いました。伝播を停止すると、さらに後の段階で望ましくない影響が生じる可能性があります。たとえば、イベントをに追加する場合はどうなり$(window).click()ますか?伝播を停止した後、ユーザーがをクリックしてもこのイベントは発生しませんx。IMOのより良い方法は、次のように考えることです。

$('.row').click(function (event) {
    if ($(event.target).hasClass('delrow')) {
        return false;
    }
    // edit row
});

x次に、イベントを要素に追加することができます。必要に応じて、イベントをifステートメントに入れることもできます...それは好みの問題です。

于 2012-09-26T16:25:48.267 に答える
1

他のイベントハンドラーが発生しないようにしたいようですので、またはのいずれかがevent.stopImmediatePropagation()必要event.stopPropagation()です。

http://api.jquery.com/event.stopImmediatePropagation/
http://api.jquery.com/event.stopPropagation/

このリンクは少し明確になるかもしれません: event.preventDefault()対falseを返す

于 2012-09-26T16:25:38.970 に答える