Javascript jQuery输入键事件功能反复发出警报

Javascript jQuery输入键事件功能反复发出警报,javascript,jquery,jsp,Javascript,Jquery,Jsp,如果newVal和oldVal相等,我必须阻止表单提交。否则我需要执行Javascript函数。-在按下的同时,从键盘上输入动态生成的文本框的键 在这种情况下,在按enter键的同时,警报会重复出现。 第一次发出警报。第二次发出两个警报。未获得预期结果 预期结果:如果我输入一个值等于曲线值,则表单不必提交。否则需要调用函数myFun()我怎么了 function pressEnter(id,newValue,i) { var newId = '#'+id; $(newId).keydown(fu

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

在这种情况下,在按enter键的同时,警报会重复出现。 第一次发出警报。第二次发出两个警报。未获得预期结果

预期结果:如果我输入一个值等于
曲线值
,则表单不必提交。否则需要调用函数
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);
      }

     }
});
}
功能按Enter键(id、新值、i)
{
var newId='#'+id;
$(newId).keydown(函数(事件){
var曲线值=“”;
var keycode=(event.keycode?event.keycode:event.which);
如果(键代码=='13'){
警报(新值+“-”+曲线值);
if(newValue==曲线值)
{
event.preventDefault();
}
其他的
{
myFun(一);
}
}
});
}

您必须解除先前的键控处理程序的绑定:

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

您可以在表单提交事件上进行此比较,而无需按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();
}
}
});
$(“您的表单id”).submit(函数(){
var newValue=$(“.your_textbox”).val();
var曲线值=“”;
if(newValue==曲线值)
{
event.preventDefault();
//或使用退货假;
}否则{
myFun();
}
});
在这里,我们可以避免不必要的绑定和解除绑定操作

我们可以在回车键上实现这一点,只需在没有函数的情况下编写,如下所示

$("#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();
}
}
});
$(“#您的_文本框_id”).keydown(函数(事件){
var newValue=$(“.your_textbox”).val();
var曲线值=“”;
var keycode=(event.keycode?event.keycode:event.which);
如果(键代码=='13'){
警报(新值+“-”+曲线值);
if(newValue==曲线值)
{
event.preventDefault();
}否则{
myFun();
}
}
});

注意:如果您在一个函数中定义这个jQuery代码的范围,那么javascript会在每个函数调用中为相同的事件添加处理程序。结果是您的代码(在“keydown”回调中的代码)多次运行。为避免您必须解除事件绑定。

对不起,按Enter键是我的要求!我只需要将上面的第三行代码替换为
$(newId).off('keydown').keydown(function(event){
,还是需要单独解除绑定?无论如何,谢谢。我没有你所有的代码,比如如何调用prescenter()函数,试试看,是的,因为我遇到了控制台错误,比如'TypeError:$(…).off不是函数“您使用的是哪个版本的jquery?”.off()用于1.7+版本。如果您使用的是旧版本,请使用.unbind()。