2011-12-30 44 views
2

我有這樣的代碼,與表單輸入數據填充DIV:從窗體輸入文本元素的最後三個字符填充div?

var div = $('div')[0]; 
$('input').bind('keyup change', function() { 
    div.innerHTML = this.value; 
}); 

,但我只想從輸入字段不是所有的字符提取最後三個字符。我如何使用jQuery做到這一點?

Thanx!

回答

6

您可以使用JavaScript的內建方法.substr()爲:

var div = $('div')[0]; 
$('input').bind('keyup change', function() { 
    var val = this.value, 
     valLength = val.length; 
    div.innerHTML = valLength < 3 ? val : val.substr(valLength - 3, 3); 
    // check if the value has less than three chracters. If yes return the plain value, if not return the less three characters. 
}); 

.substr()切出字符串的一部分。它接受兩個參數。第一個決定你希望子串開始的位置,第二個決定應該在多長時間。

+0

我想我會用一個小提琴(http://jsfiddle.net/chrisvenus/kFwcj/)來測試它是否需要一個警戒聲明(即如果val.length <3)。它出現了奇怪的結果,在鍵入A,B,C時顯示「A」,然後是「B」,然後是「ABC」,並繼續從那裏開始工作...不知道爲什麼這只是想我' d注意它是相關的(這在FF上,在IE中工作正常)。 – Chris 2011-12-30 12:15:02

+0

@Chris你是對的!我添加了一些修復,現在它可以工作。注意:緩存長度可能是微型優化,但不會造成傷害。 – 2011-12-30 12:32:56

+0

太棒了!感謝! – Ismailp 2011-12-30 13:02:06

1
var str =this.value; 
div.innerHTML = str.substring(str.length-3,str.length); 

這裏是jsFiddle

+0

代碼中的錯字。 – 2011-12-30 12:10:14

+0

@Larry:謝謝:) – xyz 2011-12-30 12:24:17

0

您可以在值中使用substr如下:

div.innerHTML = this.value.substr(-3); 

雖然作爲Microsoft JScript doesn't support a negative start value,你可能更喜歡:

div.innerHTML = this.value.substr(this.value.length-3); 

,還應注意,我絕不會使用帶有用戶輸入值的'innerHTML'在您的案例中不必要地提升對目標元素的訪問權限。相反(如你使用jQuery),使用:

div.text(this.value.substr(-3)); 
+0

我沒有看到使用'.html()'用戶輸入有任何問題。無論如何,用戶總是可以編輯標記。在任何webkit瀏覽器中按F12。 – 2011-12-30 12:12:02

+0

它只是不好的做法,允許用戶界面注入[無論]無需的網頁。 Web Developer工具就是出於這個目的,因爲我懷疑OP的接口是爲了故意允許用戶注入代碼而設計的。儘管風險可能中等到極小,但永遠不應該以「這可能永遠不會成爲問題」的觀點來處理安全問題。 – isNaN1247 2011-12-30 12:16:25

+0

你是對的'.text()'如果他只需要插入文本就更有效率。但它絕對不是*黑客夢想,因爲你總是可以插入自定義標記。只要他沒有像在服務器端那樣保存它,然後迴應它,這是沒有問題的。 – 2011-12-30 12:20:57

1

在這種情況下,我會用slice()

div.innerHTML = this.value.slice(-3); 

slice()有兩個參數; begin索引和end索引。如果兩者都是負數,則索引將作爲字符串末尾的偏移量。