我有一个文本输入和一个按钮(见下文)。我如何使用JavaScript触发按钮的点击事件时,进入键按下文本框内?

在我的当前页面上已经有一个不同的提交按钮,所以我不能简单地将该按钮设置为提交按钮。并且,我只想让Enter键单击这个特定的按钮,如果它是从这个文本框中按下,没有其他。

<input type="text" id="txtSearch" />
<input type="button" id="btnSearch" value="Search" onclick="doSomething();" />

当前回答

对于jQuery移动,我必须做:

$('#id_of_textbox').live("keyup", function(event) {
    if(event.keyCode == '13'){
    $('#id_of_button').click();
    }
});

其他回答

对于jQuery移动,我必须做:

$('#id_of_textbox').live("keyup", function(event) {
    if(event.keyCode == '13'){
    $('#id_of_button').click();
    }
});

这个onchange尝试很接近,但相对于浏览器(在Safari 4.0.5和Firefox 3.6.3上),行为不佳,所以最终,我不会推荐它。

<input type="text" id="txtSearch" onchange="doSomething();" />
<input type="button" id="btnSearch" value="Search" onclick="doSomething();" />

你可以使用的一个基本技巧,我还没有看到完全提到。如果你想在Enter上做一个ajax动作,或者其他一些工作,但不想实际提交表单,你可以这样做:

<form onsubmit="Search();" action="javascript:void(0);">
    <input type="text" id="searchCriteria" placeholder="Search Criteria"/>
    <input type="button" onclick="Search();" value="Search" id="searchBtn"/>
</form>

像这样设置action="javascript:void(0);"本质上是防止默认行为的快捷方式。在这种情况下,无论您是按回车键还是单击按钮,都会调用一个方法,并调用ajax来加载一些数据。

你可以试试下面的jQuery代码。

$("#txtSearch").keyup(function(e) {
    e.preventDefault();
    var keycode = (e.keyCode ? e.keyCode : e.which);
    if (keycode === 13 || e.key === 'Enter') 
    {
        $("#btnSearch").click();
    }
});

在Angular2:

(keyup.enter)="doSomething()"

如果您不希望按钮中有一些视觉反馈,那么不引用按钮而是直接调用控制器是一个很好的设计。

另外,id也不需要——这是NG2分离视图和模型的另一种方式。