2011-10-31 146 views
2

我有一個帶有keydown的文本框,單擊並更改綁定到它的事件處理程序。當用戶在此文本框中輸入文本時,預覽會同時更新。這很好用!從自動完成中選擇事件

但是,當用戶輸入一些文本,然後從自動完成中選擇時,只有用戶輸入的文本在預覽中可見。

只有在用戶離開文本框或點擊文本框或輸入更多字符時纔會更新。

用戶從自動填充中選擇時是否有任何事件被觸發?

注意:我沒有使用jquery自動完成插件或任何東西,只是Web瀏覽器的autocoplete。

+0

你能發表一些代碼嗎?這個問題是否發生在所有瀏覽器中? –

+0

使用Internet Explorer?也許這會讓你感興趣:http://stackoverflow.com/questions/343192/why-does-the-javascript-onchange-event-not-fire-if-autocomplete-is-on – Frug

回答

0
<script type="text/javascript"> 
    function fillReview() { 
     var email = document.getElementById("email"); 
     var review = document.getElementById("email-review"); 
     review.innerHTML = email.value; 
    } 
</script> 


<input type="text" id="email" onkeyup="fillReview();" /> 
<span id="email-review"></span> 
3

我剛碰到同樣的問題。瀏覽器(本例中爲Chrome)在點擊提議的自動完成值時不會觸發任何事件。因此,我使用setInterval來每隔100ms左右輪詢我的輸入字段,以查看它們的值是否已更改,如果是,請調用相應的函數。

這裏是我的代碼(用了jQuery):

var $form = $(".user"); 
    var $email = $("input[name='email']",$form); 

    // start polling when the field is focused 
    $email.focus(function() 
    { 
     var $inp = $(this); 
     $inp.data("val_old",$inp.val()); 
     $inp.data("val_poll",setInterval(function() 
     { 
      if ($inp.data("val_old") != $inp.val()) 
      { 
      checkEmail(); // value has changed, take some action 
      $inp.data("val_old",$inp.val()); 
      } 
     },100)); 
    }); 

    // stop polling on blur 
    $email.blur(function() 
    { 
     clearInterval($(this).data("val_poll")); 
     $(this).removeData("val_old val_poll"); 
    }); 

我曾經有一個onkeypress事件的事件,但與此輪詢它不再需要。

不是很漂亮,但有效。適用於任何瀏覽器。