2016-10-28 103 views
3

我正在写一个严格限制事件的JavaScript脚本。我必须对“焦点”事件执行一些说明,并对“选择”事件进行一些不同的说明。 令我惊讶的是,我发现以编程方式给予焦点,也会引发'选择'事件!这是一个很大的问题。 你能告诉我为什么会发生这种情况,如果我可以通过编程方式阻止选择事件,那么只有当我以编程方式给焦点时?专注于输入触发'焦点'和'选择'事件

请看下面的例子。当点击'给焦点'按钮时,控制台将会写'你选择了一些东西'!

谢谢

<!DOCTYPE html> 
 
    <html lang="en"> 
 
    <head> 
 
     <meta charset="utf-8"> 
 
     <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script> 
 
    </head> 
 
    <body> 
 

 
     <input id="field" type="text" /> 
 
     <a href="#" id="btn">Give focus</a> 
 

 
    <script> 
 
     $(document).ready(function() { 
 
      $('#field').on('select', function(e) { 
 
       console.log('You selected something'); 
 
      }); 
 
      $('#btn').on('click', function(e) { 
 
       $('#field').focus(); 
 
      }) 
 
     }); 
 
    </script> 
 

 
    </body> 
 
    </html>

+1

我认为,这两个事件是工作一样,'select'或'点击'。一旦fire'focus()',它会自动激发'select'事件。我认为不需要2个事件。我认为只有“点击”就足够了。 – Samir

+0

这不是重点。我需要两个不同的事件监听者。我必须在“点击”事件上做一些与“选择”事件不同的事情。所以我需要他们两个。问题在于避免搞砸两个事件。 – user2029958

+0

让我们考虑你需要2个不同的事件用于不同的目的。但要选择输入字段,您需要点击它。因此它会一次激发2个事件'select'和'click'。这是我的理解。 – Samir

回答

0

试试这个:

$(document).ready(function() { 
 
     $('#field').on('select', function(e) { 
 
      console.log('You selected something'); 
 
     }); 
 
     $('#btn').click(function(e) { 
 
     
 
      $('#field').focus(); 
 
     }) 
 
    });
<input id="field" type="text" /> 
 
    <a href="#" id="btn">Give focus</a> 
 
    <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>

+0

这不会改变任何东西 – user2029958

相关问题