如果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);
}
}
});
}
答案 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”回调中的代码)多次运行。为了避免你必须解开事件。