我要提出一個類似的方法爲Niklas' answer(是前面我被一些重要的事情打斷,或者可能是一隻松鼠)。所以去那個(和我+1
)。
幾個百分點,但:
- 驗證的
width
和height
領域的內容。或者至少使用parseInt
。否則,如果用戶輸入非數字字符,則正則表達式將停止匹配...
- 匹配
[0-9]*
而不是[0-9]+
。如果用戶將字段留空,後者將打破正則表達式。當然,做val = parseInt(...) || 0
也會修復它。
換句話說,我會做這樣的事情:
的jsfiddle:http://jsfiddle.net/PPvG/j8dT9/
var re = /\/Content\/Image\/([0-9]*)\/[0-9]*\/[0-9]*\//,
url = $('#url'),
val = url.val(),
width = parseInt($("#txtwidth").val(), 10) || 0,
height = parseInt($("#txtheight").val(), 10) || 0;
if (re.test(val)) {
val = val.replace(re, "/Content/Image/$1/" + width + "/" + height + "/");
url.val(val);
}
此外,如果路徑(/Content/Image/
)可能會改變未來,你可以使用這個更一般的正則表達式:/^\/(.+)\/([0-9]*)\/[0-9]*\/[0-9]*\//
並讓替換字符串以/$1/$2/
開頭。 (見this JSFiddle。)
最後,我不會綁定到keypress
。除了某些瀏覽器可能出現的副作用(如change
事件未得到處理)之外,還有一個UX問題。大多數用戶用於輸入處理其輸入的小部件,因爲他們的本機應用程序是以這種方式工作的。此外,許多用戶在輸入數字時會看到他們的鍵盤(現在的數字越來越少)。
比我的更好的實現:考慮按鍵事件並使用兩個輸入的一個代碼的好主意。 – CedX 2011-12-30 11:16:19
當我使用.live而不是.bind時,Worked很好:) tyvm :) – 2011-12-30 11:49:20