jQuery-重复输入关键事件功能警报

时间:2013-01-08 12:22:27

标签: javascript jquery jsp

如果newValoldVal相等,我必须阻止表单提交。否则我需要执行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);
      }

     }
});
}

2 个答案:

答案 0 :(得分:4)

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

$(newId).off('keydown').keydown(function(event) {...});

答案 1 :(得分: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会在每个函数调用上为同一事件添加处理程序。结果是您的代码(“keydown”回调中的代码)多次运行。为了避免你必须解开事件。