Javascript OnClick 需要双击而不是单击

Javascript OnClick needs double instead of single click

这是一个从数组 (ar_menu_ref) 中查找结果的简短脚本。结果是 links 和一个简单的 url。但是我需要双击打开 link.

Input > liveSearchValue(用户输入一个值) div > liveSearchResultList(由 liveSearchMenu() 生成的结果)

第一次点击生成的-link再次运行"liveSearchMenu()"。但为什么?此 html 标签上没有 "onclick"、注册事件或任何其他内容(已使用 IE11 进行测试和调试)。

<html>
  <head>
    <script src="jquery-1.4.2.js"></script>
    <script>
      var ar_menu_ref = new Array( new Array("home", "http://google.de"), new Array("home zwei", "http://google.de"), new Array("home drei", "http://google.de"), new Array("home vier", "http://google.de"), new Array("home fuenf", "http://google.de"), new Array("home sechs", "http://google.de"), new Array("home sieben", "http://google.de"), new Array("home acht", "http://google.de"), new Array("home neun", "http://google.de"), new Array("home zehn", "http://google.de"), new Array("home elf", "http://google.de"), new Array("home zwoelf", "http://google.de"));
      var ar_findings = new Array();
      var string;
      var index;
      function liveSearchMenu(){
        string = $("#liveSearchValue").val();
        ar_findings = new Array();
        for(var i=0; i<ar_menu_ref.length && ar_findings.length < 10 ; i++){ 
          index = ar_menu_ref[i][0].indexOf(string);
          if(index >= 0){
            ar_findings.push(i);
          }
        }

        $("#liveSearchResultList").html("");
        for(var j=0; j<ar_findings.length; j++){ 
          $("#liveSearchResultList").append("<a href='"+ ar_menu_ref[ar_findings[j]][1] +"'>" + ar_menu_ref[ar_findings[j]][0] + "</a><br/>");
        }
        console.debug(string);
        return true;
      }

      $(document).ready(function(){
        $('input').bind('change keyup',function (){
          liveSearchMenu();
        });
      });
    </script>
  </head>
  <body>
    <input id="liveSearchValue" type="text" value="">
    <div id="liveSearchResultList">
    </div>
  </body>
</html>

f

The first click on the generated -link runs "liveSearchMenu()" again. But why?

$('input').bind('change keyup',function (){
  liveSearchMenu();
});

这是监听您的 input 的代码。它监听任何输入框中的变化,但它也监听任何输入框中的任何按键(keyup)的释放。

也许您误解了 change 的作用。它不会在元素的值更改时触发,相反,它仅在满足 2 个条件时触发:

  • 元素模糊(失去焦点);
  • 该元素的值与其获得焦点时的值不同。

编辑:感谢 Crisim Il Numenoreano 帮助我更详尽地解释。 :)