在 `click` 和 `enter` 上触发事件

Posted

技术标签:

【中文标题】在 `click` 和 `enter` 上触发事件【英文标题】:Trigger an event on `click` and `enter` 【发布时间】:2012-02-27 03:12:08 【问题描述】:

我的网站上有一个搜索框。目前,用户必须单击框旁边的提交按钮才能通过 jquery 的帖子进行搜索。我想让用户也按回车键进行搜索。我该怎么做?

查询:

$('document').ready(function()
    $('#searchButton').click(function()
        var search = $('#usersSearch').val();
        $.post('../searchusers.php',search: search,function(response)
            $('#userSearchResultsTable').html(response);
        );
    );
);

HTML:

<input type='text' id='usersSearch'  /><input type='button' id='searchButton' value='search' />

【问题讨论】:

见这里:***.com/questions/699065/… 是的,搜索功能很有用... 【参考方案1】:

这样的事情会起作用

$('#usersSearch').keypress(function(ev)
    if (ev.which === 13)
        $('#searchButton').click();
);

【讨论】:

但我如何同时使用两者,按搜索或按回车键? 您将我添加的代码添加到您已有的代码中。然后两者都可以工作。【参考方案2】:

usersSearch 文本框上使用keypress 事件并查找Enter 按钮。如果按下输入按钮,则触发搜索按钮单击事件,该事件将完成其余工作。试试这个。

$('document').ready(function()
    $('#searchButton').click(function()
        var search = $('#usersSearch').val();
        $.post('../searchusers.php',search: search,function(response)
            $('#userSearchResultsTable').html(response);
        );
    )
    $('#usersSearch').keypress(function(e)
        if(e.which == 13)//Enter key pressed
            $('#searchButton').click();//Trigger search button click event
        
    );

);

Demo

【讨论】:

更好的是:使用 keyup 事件来确保你的函数只被触发一次。感谢@StevePaulo 在this answer 中的评论。 我刚刚发现的使用 keyup 的一个缺点:您将无法阻止默认操作,因为 keyup 事件仅在 的默认操作之后触发密钥已被执行(见here)。【参考方案3】:
$('#form').keydown(function(e)
    if (e.keyCode === 13)  // If Enter key pressed
        $(this).trigger('submit');
    
);

【讨论】:

【参考方案4】:

看看keypressfunction。

我相信 enter 键是 13 所以你会想要这样的东西:

$('#searchButton').keypress(function(e)
    if(e.which == 13)  //Enter is key 13
        //Do something
    
);

【讨论】:

【参考方案5】:
$('#usersSearch').keyup(function()  // handle keyup event on search input field

    var key = e.which || e.keyCode;  // store browser agnostic keycode

    if(key == 13) 
        $(this).closest('form').submit(); // submit parent form

【讨论】:

【参考方案6】:

您使用.on() 调用两个事件侦听器,然后在函数内使用if

$(function()
  $('#searchButton').on('keypress click', function(e)
    var search = $('#usersSearch').val();
    if (e.which === 13 || e.type === 'click') 
      $.post('../searchusers.php', search: search, function (response) 
        $('#userSearchResultsTable').html(response);
      );
    
  );
);

【讨论】:

为什么这个答案没有得到更多的选票?我的意思是这是较少的代码块(比如不添加另一个事件来触发点击)。这有什么缺点吗? 说真的,Nin-ya & sagarthapa。 您需要从搜索字段中捕获按键,并从搜索按钮中捕获单击。这是两个独立的 DOM 实体,所以这段代码不起作用。 它对我有用,但我必须添加 e.preventDefault() 作为第一行以防止双重执行 TIL:我可以用on() 监听多个事件,没想到你能做到!【参考方案7】:

您可以在文档加载时使用以下按键事件。

 $(document).keypress(function(e) 
            if(e.which == 13) 
               yourfunction();
            
        );

谢谢

【讨论】:

以上是关于在 `click` 和 `enter` 上触发事件的主要内容,如果未能解决你的问题,请参考以下文章

Javascript中如何按下回车键(Enter)触发click事件

winfrom窗体按下Enter触发事件和Tab切换顺序

回车事件如何触发不同的click

如何回车触发el-button的click事件

在ie9下在textbox框里面输入内容按enter键会触发按钮的事件

移动端touch事件和click事件的区别