2

newValoldValが等しい場合は、フォームの送信を阻止する必要があります。それ以外の場合は、Javascript関数を実行する必要があります。-Enter動的に生成されたテキストボックスのキーボードからキーを押している間。

この場合、Enterキーを押している間、アラートが繰り返し表示されます。つまり、初めて1つのアラート。2回目のアラート。期待した結果が得られていません。

期待されること:thenに等しい値を入力した場合curValue、フォームを送信する必要はありません。それ以外の場合は、関数を呼び出す必要がありますmyFun();。何が問題になっていますか?

function pressEnter(id,newValue,i)
{
var newId = '#'+id;
$(newId).keydown(function(event) {
var curValue= '<%=currentVal%>';

   var keycode = (event.keyCode ? event.keyCode : event.which);
    if(keycode == '13'){
    alert(newValue+"-"+curValue);
      if(newValue== curValue)
      {
      event.preventDefault();
      }
      else
      {
      myFun(i);
      }

     }
});
}
4

2 に答える 2

4

以前のキーダウン ハンドラーのバインドを解除する必要があります。

$(newId).off('keydown').keydown(function(event) {...});
于 2013-01-08T12:25:19.183 に答える
1

Enterキーを押すのではなく、フォーム送信イベントでこの比較を行うことができます。ユーザーはマウスを使用して送信ボタンをクリックできるためです。

次のように、フォーム送信時にユーザーを制限します。

$("#your_form_id").submit(function() {
var newValue = $(".your_textbox").val();
var curValue= '<%=currentVal%>';
if(newValue== curValue)
{
event.preventDefault();
//Or use return false;
} else{
myFun();
}
});

ここで、不要なバインドおよびバインド解除操作を回避できます。

そして、次のように関数なしで書くだけで、エンタープレスでこれを実現できます。

$("#your_text_box_id").keydown(function(event) {
var newValue = $(".your_textbox").val();
var curValue= '<%=currentVal%>';

var keycode = (event.keyCode ? event.keyCode : event.which);
if(keycode == '13'){
alert(newValue+"-"+curValue);
if(newValue== curValue)
{
event.preventDefault();
}else{
 myFun();
}
}
});

注: この jQuery コードを関数内にスコープする場合、javascript はすべての関数呼び出しで同じイベントのハンドラーを追加します。結果は、コード(「キーダウン」コールバックのコード)が複数回実行されることです。回避するには、イベントのバインドを解除する必要があります。

于 2013-01-08T12:38:42.720 に答える