編集:blockUI();
これは、Firebug を使用してメッセージをログに記録したことが原因であると誤って想定しましたconsole.log
が、ここの例では、複製するために firebug が必要ないようにアラートに変更しました。もう一度テストするblockUI
と、削除でき、onclick
発火しませんでした。この問題は、DOM が変更されたり、フィードバックが与えられて DOM が起動しなくなったりするたびに発生するようonclick
です。
jQuery blockUI プラグインに問題があり、関連のない 2 つのイベントを発生させています (私がそれを失っていない限り)。
基本的に、onchange
イベントがバインドされたテキストボックスがあります。このイベントは、UI をブロックし、ajax 呼び出しを実行し、成功すると UI のブロックを解除します。ajax はテキストをメモリに保存しています。もう 1 つのコントロールは、UI をブロックする on イベントを持つボタンでonclick
あり、メモリ内の内容をデータベースに保存する ajax 要求を起動し、成功すると UI のブロックを解除します。
これらは両方とも別々に正常に動作します。onchange
ボタンをクリックしてトリガーすると、問題が発生します。次に、 のみonchange
が起動され、onclick
は無視されます。
チェックボックスのテキストを変更し、リンクをクリックすると、IFjQuery.blockUI()
が存在する (またはアラート)onchange
だけが発生し、保存が呼び出されることはありません。blockUI
(またはアラート)を削除すると、両方の関数が呼び出されます。
問題を確認できる完全に機能する例を次に示します。ajaxの遅延をシミュレートしようとしたときにそこにあることに注意してくださいsetTimeout
が、それがなくても問題が発生しています。
複製するには、テキスト ボックスに何かを入力し、[保存] をクリックします。両方のイベントが発生するはずですが、onchange
トリガーされるのは のみです。
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script src="http://github.com/malsup/blockui/raw/master/jquery.blockUI.js?v2.31"></script>
<script>
function doSomething(){
//$.blockUI();
alert("doing something");
//setTimeout(function(){
//$.unblockUI();
//},500);
}
function save(){
//$.blockUI();
console.log("saving");
//setTimeout(function(){
//$.unblockUI();
//}, 1000);
}
</script>
</head>
<body>
<input id="textbox" type="text" onchange="doSomething();">
<a id="link" href="#"onclick="save()">save</a>
</body>
</html>