2016-10-28 63 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