2013-05-31 26 views
0

我在jQuery的初學者,但我已經盡我所能做到這一點,可惜我錯過了什麼臨時禁用keyup事件時,文本輸入是空白

我怎麼能臨時禁用keyup事件時,文本輸入是空白並在我輸入了一些內容後再次啓用它?

我不能在按鍵中看到退格,所以我使用了鍵控。這裏是我的代碼

$('#searchBox').keyup(function(e){ 
if(e.keyCode != '18' && e.keyCode != '91' && e.keyCode != '17' && e.keyCode != '16' && e.keyCode != '20' && e.keyCode != '27' && e.keyCode != '113' && e.keyCode != '115' && e.keyCode != '118' && e.keyCode != '119' && e.keyCode != '120' && e.keyCode != '122' && e.keyCode != '123' && e.keyCode != '44' && e.keyCode != '19' && e.keyCode != '45' && e.keyCode != '46' && e.keyCode != '36' && e.keyCode != '33' && e.keyCode != '34' && e.keyCode != '35' && e.keyCode != '39' && e.keyCode != '37' && e.keyCode != '38' && e.keyCode != '9'){ 
    if(e.keyCode == '8' && $(this).val()==""){ 
     //what will i put here 
    }else if(e.keyCode == '8' && $(this).val()!=""){ 
     refreshWookmark($(this).val()); 
    }else{ 
     refreshWookmark($(this).val()); 
    } 
} 
}); 
+2

你能描述你想完成什麼?看起來好像只有少數按鍵「鍵」不會在文本框中留下任何東西? – n8wrl

+0

歡迎來到SO,Eric!在你的問題中發佈你所嘗試過的代碼是一般的做法,所以人們可以幫助你。 – ckpepper02

+0

我認爲你需要一個keyup(或keydown等)事件來跟蹤你是否應該重新啓用keyup事件... – landons

回答

0

而不是禁用它,只是檢查輸入是否存在,以及keyCode是什麼,你認爲有效:

$('#searchBox').on('keyup',function(e){ 
    var bad = ['18','91','17','16','20','27','113','115','118','119','120','122','123','44','19','45','46','36','33','34','35','39','37','38','9'], 
     isBad = false; 

    for(var i=bad.length;i--;){ 
     if(e.keyCode == bad[i]){ 
      isBad = true; 
      break; 
     } 
    } 

    if(this.value.length > 0 && !isBad){ 
     refreshWookmark(this.value); 
    } 
}); 

這隻會運行你想要的功能,當輸入存在和keyCode是正確的,我認爲這是你要去的。

此外,99.9%的時間可以使用this.value而不是$(this).val()。這節省了將this包裝到jQuery對象中的開銷,然後使用內部方法獲取值(基本上是this.value)。

+0

謝謝@EricNilo,這就是我得到的只是槍響答案! – PlantTheIdea

0

您在空白的輸入可以return

$("#idOfElement").keyup(function() { 
    if (!this.value == '') { 
     //do stuff 
    } else { 
     return; 
    } 
}); 
+0

雖然......我以爲他想禁用它,但是keyup事件仍然會發生。 – crush

+0

它會發生,但所有的功能將會消失,我覺得這比解除綁定和重新綁定更容易。 – tymeJV

+0

他需要停止傳播。也許我只是不明白他想要什麼。 – crush

0

如果該值爲空,難道你不能擺脫處理程序嗎?

$(element).keyup(function(e) { 
    if (this.value.trim() == '') 
     return; 

    // do stuff 
}); 
+0

除非他停止傳播,否則keyup事件仍然會發生。 – crush

+0

是的,但是如果你跳過他不想解僱的處理程序就沒有關係,對吧? – landons

+0

從這個特定的處理者返回不會阻止任何其他人射擊。 – crush

0

要禁用KEYUP功能或其他功能試試這個

if() 
    { 
    obj.keyup(function() { 
    //code 
    }); 
    }else{ 
    obj.unbind("keyup") 
    }