這標題實在很難下....有點難表達我想表達的~
如果有一個表單,想要用js檢查使用者有填寫的輸入項目數量的話
都會用好用的 selector 來一行搞定
ex :
$(".must[value='']") 或是 $(".must[value!='']")
或是
$("input[type=text][value!='']")
就直接抓到user 有哪些欄位資料沒有填了
但是今天在jQuery 1.9 ~ 1.10 下這樣寫居然就沒法動態抓到user填寫後的正確資料
舉個例子
假設 html 如下
==============================================
姓名 : <input type="text" name="name" class="must" value="" /><br />
電話 : <input type="text" name="tel" class="must" value="" /><br />
email : <input type="text" name="email" class="must" value="" /><br />
地址 : <input type="text" name="address" class="must" value="" /><br />
<input type="button" value="新增" />
js 如下
==============================================
這樣寫 :
alert($(".must[value!='']").size());
結果如下 :
(預料中)
嘗試輸入幾個值 :
(預料中)
But!!!! 同樣的一行code,改用 jQuery 1.9.1 之後
(預料中)
嘗試輸入幾個值
發現還是 0,他只會抓取你一開始的value值,使用者後來輸入的就無法動態抓到
(靠X)
不知道為什麼會這樣?
但是我查了一下 1.9 的 Upgrade Guide 裡面並沒提到有改啊!
但文件裡面是有說建議用 .not 取代 (不是只是建議嗎?)
http://api.jquery.com/attribute-not-equal-selector/
- Because
[name!="value"]
is a jQuery extension and not part of the CSS specification, queries using[name!="value"]
cannot take advantage of the performance boost provided by the native DOMquerySelectorAll()
method. For better performance in modern browsers, use$( "your-pure-css-selector" ).not( "[name='value']" )
instead.
所以如果以後有要動態直接用selector 抓到使用者輸入完後的正確資料的話
原本是
alert($(".must[value!='']").size());
現在可以改成這樣
alert($(".must").not(function(){
return this.value == "";
}).size());
然後因為是 not 所以記得是相反的啊 ~_~