2011-10-04 56 views
1

當輸入內部有3個或更多字符並且不等於佔位符時,以下函數應該會顯示一個面板。基於字符串長度失誤的JQuery函數

$('#search').keydown(function(){ 
      $('#header .suggestion').removeClass('visible'); 
      var slength = $(this).val(); 
      if(slength.length > 2 && slength != $(this).attr('placeholder')){ 
       //activate AJAX script 
       $('#header .results').addClass('visible'); 
      } 
      else { 
       $('#header .results').removeClass('visible'); 
      } 

    }); 

直到顯示5個字符纔出現。爲什麼。

非凡

+0

請問您可以小提琴嗎? www.jsfiddle.net –

+0

@RussC我現在還沒有時間,但我會在晚些時候開始 –

+0

一些更多的代碼可能會有所幫助。首先看,這部分'slength!= $(this).attr('placeholder')'可能會導致問題。 – rgin

回答

0

的​​和keypress事件被調用之前,瀏覽器已處理的輸入。在這些事件中,開發人員可以添加一種方法來防止用戶輸入文本。

因此,當您在聆聽​​函數時,$(this).val()不會返回「期望」值。

的圖像(用戶已經集中在輸入字段):

{ } <-- Empty input field 
    [X] <-- Use presses the X key 
    **KEYDOWN** 
    **KEYPRESS** 
{X} <-- "x" appears in the text field 
    **KEYUP** 

要獲得輸入的「預期」的價值,你必須改用的​​的keyup事件。