2012-06-28 64 views
3

我想在我開始鍵入文本框時加載gif加載程序。我將它附加到包含keyup上的文本框的div。我遇到的問題是,每次鍵入字母時都會附加加載程序,而當我鍵入第一個字母時,我只想將其追加一次。執行一次keyup

function loader(){ 

    $('#contrib_search').bind('keyup', function(){ 
     $('#contrib_text').append('<div id="loader"></div>'); 
    }); 
} 

任何想法如何做到這一點?
謝謝

+0

你爲什麼不有裝載機'顯示:在默認情況下none',然後在按鍵掉級 – Dhiraj

回答

3

添加裝載機

function loader(){ 

    $('#contrib_search').bind('keyup', function(){ 
     $('#contrib_text').append('<div id="loader"></div>'); 
     $('#contrib_search').unbind('keyup'); //or $(this).unbind probably a tad faster 
    }); 
} 
2

我的建議是硬編碼加載器到您的HTML代碼,然後.show()它在.keyup()事件處理程序。

然後例如在.blur()事件.hide()它和問題沒有了。

編輯:

var $contrib = $('#contrib_text'); 

$contrib.bind({ 
    keyup: function(){ 
     $contrib.find("#loader").show(); 
    }, 
    blur: function(){ 
     $contrib.find("#loader").hide(); 
    } 
}); 
2

之後就可以解除綁定KEYUP也許這可以工作:

var pressed = false; 
    function loader(){ 

     $('#contrib_search').bind('keyup', function(){ 
      if (pressed == false){ 
       $('#contrib_text').append('<div id="loader"></div>'); 
       pressed = true; 
      } 
     }); 
    } 

或代替使用這個布爾只需要調用取消綁定,而不是我的線路,說press = true;

2

使用「一個」可以幫助:

function loader() { 
    $('#contrib_search').one('keyup', function() { 
    $('#contrib_text').append('<div id="loader"></div>'); 
    }); 
}