2012-09-06 56 views
2

我看各個崗位上的SO這個話題。我爲一個文本框製作了一個字符減量計數器(例如'98個字符左側),我唯一能夠觸發它的事件是keydown(),但是當文本粘貼到文本框中時,它不處理它。我試圖做一個updateCharCount()功能,並將其設置爲每一個事件(都在同一時間,每個單獨:KEYUP,的keydown,按鍵,改變jQuery的變化()事件 - 不能與綁定(),生活(),KEYUP +的keydown +按鍵,沒有

我自己也嘗試設置與bind()live()處理程序。如果我試試。同時爲keydown設置處理程序的keyyd,既沒有火,也沒有發生任何改變,儘管無處不在,儘管處處都是我的解決方案,這怎麼可能?

另外,當我僅處理keydown()事件時,我遇到了一些奇怪的行爲(順便說一下,我的文本框的maxLength屬性設置爲100)如果我鍵入最大字符數,退格一次或兩次,然後鍵入最大值再次計數,它將讀取'1字符(左)',即使它已經最大化,並且如果我從那裏退格一次,它將讀取'0字符(左)'。這裏是我的代碼:

function updateCharCount(){ 
    var clientmsg = $("#usermsg").val(); 
    var count = $("#usermsg").attr("maxLength") - clientmsg.length; 
    $("#charsleft").html(count); 
} 
$("#usermsg").keydown(updateCharCount()); 

如果有人可以解釋的奇怪的行爲,這將是不錯,但我真正想知道的是爲什麼如果.change()的用途很廣泛,它不爲我工作,也沒有.bind('change',...)或.live('change',...)

+4

我沒有看過完整的文章,但第一件事(注意:移除了'()' –

+0

@Vega - 你指出的可能是修復。 – techfoobar

+0

@Vega我給你部分信貸的答案,但你的職位是一個註解,因此,;) –

回答

4

可以使用.on()綁定多個事件(綁定和生活已棄用)是這樣的:

$("#usermsg").on({ 
    change: updateCharCount, 
    keyup: updateCharCount, 
    keydown: updateCharCount 
})​ 

jsFiddle example

+0

keydown將不會幫助計數器更新,因爲那時候字段中的文本尚未更改。 –

+0

@FAngel - 很好。我想向OP展示如何綁定多個事件並正確調用該函數,並讓他們決定使用哪些函數。 – j08691

+0

當我使用該代碼時,它不僅無法正常工作,而且其餘的代碼在它無法工作之後。而且我完全按照你寫的那樣複製它(當然加了';'),之後用分號試了一下,好好衡量一下 –

1

使用keyup而不是​​因爲keydown發生在插入符號之前。

僅當焦點離開該字段時纔會發生文本字段更改。如果有什麼變化,但不是任何時候你添加一個符號

KEYUP也將處理粘貼事件。

+0

很高興知道keyup處理粘貼事件,但我想在用戶按住某個鍵時使用它們,當我只使用keydown時,它在鍵被按下時對每個字符都有效,但它們都不起作用當我嘗試結合使用它們 –

+1

@BrandonMiller按鍵事件將重複每個符號,如果用戶持有的關鍵 –

+0

@BrandonMiller [這裏](http://www.quirksmode.org/dom/events/keys.html)是事件的順序以及每個人何時被解僱的說明 –