2

newVal如果和oldVal相等,我必须阻止表单提交。否则我需要执行 Javascript 函数。-Enter从键盘上按下动态生成的文本框的键。

对于这种情况,当按下回车键时,警报会反复出现。即,第一次发出警报。第二次发出两次警报。并且没有得到预期的结果。

预期:如果我输入的值等于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

您必须取消绑定以前的 keydown 处理程序:

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

您可以在表单提交事件上进行此比较,而不是按回车键。因为用户可以使用鼠标点击提交按钮。

限制用户提交表单如下,

$("#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 会在每个函数调用上为同一事件添加处理程序。结果是您的代码(“keydown”回调中的代码)多次运行。为避免您必须取消绑定事件。

于 2013-01-08T12:38:42.720 回答