2013-04-17 64 views
5

我們有一個文本框,用戶應該輸入一些數據。但是,該數據不得超過500個字符。爲了做到了這一點,我們已經實現呼籲KeyUp事件以下功能:以編程方式更改文本大小可防止更改事件

 function keyupMaxLimit(obj, maxlen) { 
      if (parseInt(obj.value.length) > maxlen) { 
       $(obj).val($(obj).val().substr(0,maxlen)); 
      } 
     } 

這是工作:用戶無法進入更多的是應該。 我們還有一個與同一文本框的Change事件關聯的函數,以檢測變化並執行我們的魔術。

$(document).on("change", "#myTextBox", function() { 
     //magic here 
    }); 

這也是工作:當用戶改變文本功能被調用。

但是,這是我們的問題,這兩個功能不能一起工作。例如,如果用戶介紹他/她應該輸入的更多字符,第一個函數將修剪文本,但第二個函數不會被調用!

看來我們對第一個函數的文本框所做的更改是阻止/清除Change事件。它是否正確?任何解決方法?我無法在第一個函數上顯式觸發Change事件,因爲我們會創建不必要的更改。

編輯 - 你可以在這裏看到這發生:http://jsfiddle.net/jpaires/dpujx/ 打開瀏覽器的控制檯,並在文本框上寫上「12345」。該事件將被觸發(控制檯上的「a-ok」)。但是,如果您編寫「123456」,文本將被剪切並且事件將不會被觸發(控制檯上沒有「a-ok」)。由於Juhana :)

+0

假設「魔術」只是'keyupMaxLimit(this,500);'它應該可以正常工作。沒有什麼會清除事件處理程序 – Archer

+0

你的keyup事件可能有一些錯誤..請告訴我們代碼... too – Darshan

+0

@Archer是的,它是。在我的textarea標籤中,我的屬性如下:onkeyup =「keyupMaxLimit(this,500); – jpaires

回答

-3

我應該給一個嘗試限制字符數在HTML輸入這樣的代替:

<input type="text" id="Textbox" name="Textbox" maxlength="500" /> 

另一件事是,如果你想要做的事時,文字輸入的變化,我認爲在這種情況下,你可以輸入使用keyup事件也,就像這樣:

$(document).on("keyup", "#myTextBox", function() { 
//SOMETHING 
}); 

我更新了這個撥弄我的sugestion和它的作品... http://jsfiddle.net/BdqDB/

通過這種方式,你總是會觸發日誌,文本是有限的。

另一種方案是: 如果你想用你的函數來剪切文本我會做這樣的保留:

$(document).on("keyup", "#myTextBox", function() { 
    keyupMaxLimit(this,5); 
    console.log('other stuff'); 
}); 

查看http://jsfiddle.net/wTQa4/1/

這方面的工作。如果你檢查jQuery的變化文檔,你可以找到: 「更改事件發送到一個元素,當它的值發生變化時,這個事件僅限於元素,方框和元素,對於選擇框,複選框和單選按鈕,當用戶做出選擇與鼠標,但對於其他元素類型,事件被推遲到元素失去焦點。

所以我認爲這個問題的答案是,你不會得到你想要通過改變事件,我給你一個解決你的問題,但你沒有發送反饋... 你不應該做的其他事情是調用內聯js方法,一旦你使用jQuery,很容易將事件綁定到元素,並且它是不顯眼的javascript,這是寫js的最佳實踐。

+0

只是試圖幫助,避免一個函數做一個輸入屬性做的事情,並得到3票下來?!非常有趣.... – tbem

+0

這並不回答這個問題。可以建議替代路線,但您應該在評論中這樣做。在答案中也是可以的,但你也必須回答實際問題(「你的代碼不工作,因爲等等,你可以通過將foo改爲bar來修復它,儘管最簡單的方法是使用maxlength屬性。 「) – JJJ

+0

儘管如此,我發現這是行不通的。這很奇怪。 – jpaires

相關問題