我有一个文本框,用户可以在其中输入一个类别,当他们按下回车键时,我想使用jQuery点击表单中的特定按钮,但到目前为止这还没有工作,我可以'看到可能导致问题的任何语法错误..它会回发到表单,但是使用不同的(默认)按钮,而不是jQuery代码中的按钮。
$(document).ready(function() {
$('input#newcategory').keypress(function(e) {
var KEYCODE_ENTER = 13;
if (e.keyCode == KEYCODE_ENTER) {
setTimeout(function() {
$('input#addnewcategory').click();
});
return true;
}
});
});
更新: 取出setTimeout修复了问题,虽然我不确定原因。在我的应用程序的其他方面,我需要它,否则它不会强制按钮单击。
$(document).ready(function() {
$('input#newcategory').keypress(function(e) {
var KEYCODE_ENTER = 13;
if (e.keyCode == KEYCODE_ENTER) {
$('input#addnewcategory').click();
return true;
}
});
});
答案 0 :(得分:0)
你试过了吗?
$(document).ready(function() {
$('input#newcategory').keypress(function(e) {
if (e.which == 13) {
$('input#addnewcategory').trigger("click");
}
});
});
答案 1 :(得分:0)
这是我的工作代码
$(document).keyup(function(event) {
if (event.keyCode == 13) {
$("#addnewcategory").click();
}
});
您还可以更改代码以将按键事件放入文档而不是输入#newcategory
答案 2 :(得分:0)
试试这个
$(document).ready(function() {
$('input#newcategory').keypress(function(e) {
if (e.which == 13) {
setTimeout(function() {
$('input#addnewcategory').click();
});
return true;
}
});
});
答案 3 :(得分:0)
在文本输入中按Enter键时的默认操作是提交输入所属的表单。因此,在处理按键事件之前,您需要调用
e.preventDefault();
否则表单将在您的处理程序执行之前提交。
答案 4 :(得分:0)
尝试以下代码。
$(document).ready(function() {
$('input#newcategory').keyup(function(e) {
var KEYCODE_ENTER = 13;
if (e.keyCode == KEYCODE_ENTER) {
setTimeout(function() {
$('input#addnewcategory').click();
});
}
});
});
$('input#addnewcategory').click(function () {
return false;
});
答案 5 :(得分:0)
您对 setTimeout
的来电缺少延迟:
显然这不是必需的。 Some sources说这是必需的,other say不是。根据我的测试,它不是必需的(Chrome),但默认为0
,所以我仍然建议明确。
setTimeout(function(){}, milliseconds)
关于触发事件:
调用click
通常必须来自受信任的事件。我通常将这些描述为“用户驱动的事件”或“需要用户交互的事件”(但这简化了它)。所有浏览器可能都不够智能,无法识别setTimeout
内的匿名函数是否来自可信事件,如keypress
。
在Firefox中,如果某个事件由用户调用,则该信件是受信任的,如果该事件由脚本调用,则不受信任。在Internet Explorer中,除了使用createEvent方法创建的事件外,所有事件都是可信任的。
有关Trusted events的更多信息。