【问题标题】:Clicking a link when enter key is pressed using jQuery使用 jQuery 按下回车键时单击链接
【发布时间】:2010-12-21 12:17:42
【问题描述】:

我正在努力做到这一点,当用户在文本框中并按下回车键时,它与单击链接相同,在这种情况下,它应该将他们带到另一个页面。这就是我所拥有的,但它不起作用。

代码

//jQuery 
$(document).ready(function() {

  //if focus is in the input box drivingSchoolInput
  $("#drivingSchoolInput").live("click", function() {

    //if enter key is pressed
    if(e.keyCode == 13) {

        //click the button and go to next page
        $("#button1").click();
    }       
  });   
});

标记

<form>      
  <div class="formDiv">
    <label for="City">Search by Driving School</label>
    <span class="inputBox"><input type="text" name="City" class="input" id="drivingSchoolInput" /></span>
  </div>

  <h4 class="submitButton"><a href="school.html" id="button1">Submit</a></h4>     
</form>

【问题讨论】:

    标签: javascript jquery dom javascript-events


    【解决方案1】:

    写一个小的jQuery插件:

    jQuery.fn.enter = function(callback) {
       if(!callback) {
          //don't attach if we have garbage.
          return;
       }
    
       $(this).keydown(function(e) {
           var ev = e || event;
           if(ev.keyCode == 13) {
              callback();
              return false;
           }
       }); 
    };
    

    用法:$(element).enter(callback_func);

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      看看这个:jQuery Event Keypress: Which key was pressed?

      我将在此处合并来自 post 的代码:

      $('#searchbox input').bind('keypress', function(e) {
       var code = e.keyCode || e.which;
       if(code == 13) { //Enter keycode
         //Do your stuff + form submit
       }
      });
      

      PS:我从未测试过它,但它“应该”工作。 :P

      【讨论】:

      • 问题是我不知道怎么让它转到下一页。
      • 试过了,还是不行 $("#drivingSchoolInput").bind('keypress', function(e) { var code = e.keyCode || e.which; if(代码 == 13) { window.location = "google.com"; }
      【解决方案3】:

      这段代码有几个主要问题...

      第一个pygorex1 caught:如果你想引用它,你需要指定事件参数......

      第二个在您的代码的同一区域:您正试图在click 事件的处理程序中检查关键事件!

      第三个可以在这一行找到:

                  //click the button and go to next page
                  $("#button1").click();
      

      ...什么都不做,因为您在该链接上没有事件处理程序,并且 jQuery's click() function does not trigger the browser's default behavior!

      请尝试以下方法:

      // if a key is pressed and then released
      $("#drivingSchoolInput").live("keyup", function(e) {
      
        // ...and it was the enter key...
        if(e.keyCode == 13) {
      
          // ...navigate to the associated URL.
          document.location = $("#button1").attr('href');
        }               
      });
      

      【讨论】:

      • document.location = $("#button1").attr('google.com');这仍然没有用。你有机会测试它吗?
      • 为什么要将“google.com”传递给attr() 函数?没有具有该名称的属性,并且无论如何您都想要href 属性的值...
      【解决方案4】:

      我想做类似的事情,所以在阅读了上面 David K Egghead 的建议后,我想出了这个,即使在按下 enter 时也会触发“点击”。也可以用来“点击”按钮!

      $(document).keypress(function(event){if(event.keyCode==13){$('.save_icon').trigger("click");}});
      

      【讨论】:

        【解决方案5】:

        这一行需要e:

        $("#drivingSchoolInput").live("click", function(e) {
        

        【讨论】:

        • 另外,它需要使用click 事件来测试输入字段中的键盘事件...
        • 为什么需要e? Javascript 现在检查函数的数量吗?
        • @ndim:需要e,因为他在函数中引用了e
        • @Shog9:哎呀。需要更多的咖啡。
        • 哈!不敢相信我错过了点击处理程序。
        【解决方案6】:

        我有一个非常相似的问题。但是,我无法找到完整的解决方案。

        我只是想将相同的函数附加到 2 个不同的元素上,并使用 2 种不同的方法来执行它。例如,Tom 想要什么:单击链接,或在输入字段中按 ENTER,然后执行相同的功能(即导航到另一个页面)。

        Jacob Relkin 为“输入”按键提出了一个好主意。我已将其包含在下面的代码中:

        所以基于以下简单标记:

        <div>
          <label for="myInput">Type Stuff</label>
          <input id="myInput" type="text" value="" />
          <a id="myButton" href="http://google.com">Click me!</a>
        </div>
        

        使用这个 JavaScript (JQuery) 代码:

        //this is the plugin Jacob Relkin suggested
        (function($) {
        $.fn.enter=function(callback){
            this.keyup(function(e) {
                var ev = e || event;
                if(ev.keyCode == 13) {
                    callback();
                    return false;
                }
            }); 
        };
        })(jQuery);
        
        $(document).ready(function(){
        
            var fnDoStuff = function() {
                //insert code here
                //for this example I will complete Tom's task
                document.location.href = $("#myButton").attr('href');
            };
        
            $('#myInput').enter(fnDoStuff);
            $('#myButton').click(fnDoStuff);
        
         });
        

        通过这种方式,您可以将相同的功能附加到任意数量的元素上,进行任何类型的交互。

        【讨论】:

          【解决方案7】:

          我在 asp.net LinkBut​​ton 中使用了以下内容

                  $('#drivingSchoolInput').keypress(function (event) {
                      if (event.keyCode == 13) {
                          eval($('#button1').attr('href'));
                      }
                  });
          

          我在标题上也有一个允许搜索的表格,所以我需要添加另一个步骤来禁用表格发布。

                  $('#drivingSchoolInput').keypress(function (event) {
                      if (event.keyCode == 13) {
                          $('#header1_ButtonTerm').attr('disabled', 'disabled'); <-- hack added to kill FORM POST
                          eval($('#button1').attr('href'));
                      }
                  });
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多