0

jquery を使用して ajax を使用しています。次のコード スニペットを使用して行を削除しています。

$('#example a.delete'). live('click', function (e) {
e.preventDefault();
if (confirm("Are you sure you want to delete this row?"))
{

     alert("Hello World!")
}

});

グリッド ビュー表示ボタンをクリックすると、ajax によりページが更新されずにグリッド ビューが表示されます。グリッド ビューの表示ボタンを複数回クリックすると、それに応じてグリッド ビュー エリアが再度更新されます。しかし、確認ボックスが複数回表示されます。これは私の no と同じです。単一行の削除ボタンをクリックしたときの、グリッドビューの表示ボタンのクリック数。

どうすればこれを回避できますか!

編集済み

HTML コード:

<td><a class="delete" href="#" style="margin-left: 10px"><img src="images/delete-icon.png" width="16px" height="16px" /></a></td>

編集済み

完全なコード スニペット:

$('#example a.delete'). live('click', function (e) {
e.preventDefault();
if (confirm("Are you sure you want to delete this row?"))
{
    $getCode = $(this).parent().parent().attr('id');
    var oTable = $('#example').dataTable();
    var index =oTable.fnGetPosition( document.getElementById($getCode) );

    $.post("DeleteDepartment", {
        depID:$getCode                   
    }, function(data) {
        if(data.result >0){
            var oTable = $('#example').dataTable();
            oTable.fnDeleteRow( index );
        }else{
            alert("Operation Fail");
        }
    });

}

});
4

3 に答える 3

5
$('#example a.delete').unbind('click').bind('click', function (e) {
     e.preventDefault();

     if (confirm("Are you sure you want to delete this row?"))
     {

        alert("Hello World!")
     }

});

于 2012-05-12T18:04:48.643 に答える
1

ボタンに複数のイベントを添付しているようです。一度だけ呼び出しているのですlive()か? 複数回呼び出すと、複数のハンドラーが取得されます。

(もちろん、これが私が.onclick = function() {...}個人的に使用することを好む理由です)

于 2012-05-12T17:48:52.037 に答える
0

クリックごとに1回確認を行うようにコードが書かれているようです。一度だけ確認したい場合は、すでに確認したことをコードに記憶させる必要があります。

サーバーが成功コールバック関数を呼び出すまで、行は削除されません。その間、行をクリックし続け、クリック イベントを発生させることができます。

ユーザーが確認したときに行に変数またはプロパティを設定し、クリックするたびにこの変数をチェックすることができます。変数が設定されていない場合にのみ、確認メッセージを表示します。

または、クリックした要素の状態を変更したり、画像を変更したり、スタイルを変更したり、属性を設定したりできます。クリックされたことをコードに通知し、行が既に削除対象としてマークされていることをユーザーに示すことができます。

または、jquery の .one() メソッドを試してイベントを添付することもできます。

于 2012-05-12T17:56:24.387 に答える