2014-12-21 25 views
1

當前我在輸入字段上使用keydown事件來驗證30個字符的限制。當用戶輸入第31個字符時,驗證消息出現「請輸入30個字符」。但是,當我通過簡單地雙擊文本框並按任何字母/數字來選擇整個文本,然後文本不會刪除,並顯示消息「請輸入30個字符」。我想在用戶按字母/數字時刪除整個文本。目前我正在使用:將輸入值還原爲最後一個有效字符串

$('#inputBox').live("keydown", function(event) { 

    var inputLength = $(this).val().length; 
    var boolPassValidation = false; 

    if (event.keyCode === 8) { 
     boolPassValidation = true; 
    } 


    if (inputLength >= 30 && !boolPassValidation) { 
     alert("Please enter a valid PO number, 30 characters max."); 

    } 

    return false; 
} else return true; 
}); 

任何建議將是很大的幫助。

+0

Reaso n:這是因爲您在該處理程序中返回false,使jQuery停止按鍵的默認行爲(插入鍵)。您的驗證器被執行,但未插入字符。 –

回答

1

jsFiddle demo

取決於jQuery的v您使用,但.live()方法已(因爲v.1.7和1.9移除) - 使用.on()代替:

$(document).on("input", "#inputBox", function(e) { 
    var v = this.value; 
    if (v.length > 30 && e.which!==8) { 
     alert("Please enter a valid PO number, 30 characters max."); 
     this.value = this.dataset.oldVal; 
    }else{ 
     this.dataset.oldVal = v; 
    } 
}); 

如果您要搜索的字符串長度爲30個字符,則需要使用>30而不是>=30,否則您將在3 0個字符,這很好。

使用jQuery的event.which而不是鍵代碼更好的瀏覽器之間的兼容性

如果#inputBox是不是比你動態生成可以簡單地使用$("#inputBox").on("input", function(e) {否則嘗試使用,而不是一個靜態父#選擇$(document)

PS:您可以額外添加maxlength=30屬性到您的輸入元素

+1

非常感謝你。它工作正常 – user3817749

+0

@ user3817749不客氣 –

+0

C. Bulijan發生一個問題。輸入30個字符後,當用戶在字符串之間放置任何字符時,它將被接受。我不想在文本框中放置任何字符。當用戶按刪除按鈕,然後它可以接受該字符,當限制達到30時,它再次應該顯示一條消息。意味着輸入框只接受30個字符。 – user3817749

相關問題