1

確認メッセージが何度も表示されないようにする方法を考えていました。よろしくお願いします。

javascript

$('img.delete').click(function () {         
    if(confirm("This selected record will be deleted. Are you sure?")){
        //Do something...
    }
});

html

<tbody>
    <tr>
        <td><img class="delete" src="/images/delete.gif"><input value="708" type="hidden"></td>
        <td>aaa</td>
    </tr>
    <tr>
        <td><img class="delete" src="/images/delete.gif"><input value="595" type="hidden"></td>
        <td>bbb</td>
    </tr>
    <tr>
        <td><img class="delete" src="/images/delete.gif"><input value="19" type="hidden"></td>
        <td>ccc</td>
    </tr>
</tbody>
4

5 に答える 5

2

コードの問題は、クリックハンドラーを複数回適用することです。これはあなたが投稿したコードからは見えませんが、それは間違いなく原因です。

複数回実行$('img.delete').click(fn)しても、前のクリックハンドラーは上書きされません。むしろ、別のハンドラーを追加します。その後、img.deleteをクリックすると、登録されているすべてのハンドラーが連続して呼び出され、1つのポップアップウィンドウの後に別のポップアップウィンドウが表示されます。

.unbind()最初に電話することで解決する必要があります。そうすることで、以前のクリックハンドラーが新しいものに効果的に置き換えられます。

$('img.delete')
    .unbind('click')
    .click(function () {         
        if(confirm("This selected record will be deleted. Are you sure?")){
            //Do something...

            // remove the image here I guess?
        }
    });

しかし、根本的な原因を突き止めることができればもっと良いでしょう。

于 2012-11-29T09:18:25.800 に答える
0

jqueryでバインドを解除することでこれを行うことができます

$(function(){
    $('img.delete').click(function () {         
        if(confirm("This selected record will be deleted. Are you sure?")){
            //Do something...
        }
        $('img.delete').unbind('click');
    });

});
于 2012-11-29T09:16:07.257 に答える
0

Jquery .one()メソッドを使用します。これは、そのために作成されたものとほぼ同じです。

 $('img.delete'.one('click',function () {         
            if(confirm("This selected record will be deleted. Are you sure?")){
                //Do something...
            }
        });        
于 2012-11-29T09:17:12.230 に答える
0

これについて心配している場合は、クリックした後にイベントハンドラーがないことを確認できます。

var confirm_me=function () {
    if(confirm("This selected record will be deleted. Are you sure?")){
        //Do something...
    }
    //restore event handler
    $(this).one('click',confirm_me);
    //prevent event propagation
    return false;
    }

//BE sure that you not do that in loop. if possible do - see second code
$('img.delete').one('click',confirm_me);


その他の場合:

var confirm_me=function () {
     var t=$(this);
    //check processing flag
    if (t.data('processing')) return false;
    //Set processing flag
    t.data('processing',1);


    if(confirm("This selected record will be deleted. Are you sure?")){
        //Do something...
    }

    //restore event handler
    t.one('click',confirm_me);
    //remove processing flag
    t.data('processing',0);
    //prevent event propagation
    return false;
    }

$('img.delete').one('click',confirm_me);
于 2012-11-29T09:18:45.487 に答える
0

それを使用してください、それは私によって検証されています。

<script type="text/javascript">
var check = false;
$(document).ready(function () {
        $('img.delete').click(function () {
        if (check != true) {
            if (confirm("This selected record will be deleted. Are you sure?"))
                check = true;
        }
        else {
            alert('you have deleted one');
        }
        });
     });
</script>
于 2012-11-29T09:21:25.897 に答える