這標題實在很難下....有點難表達我想表達的~

如果有一個表單,想要用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());

結果如下 :

IMAG0191 

(預料中)

嘗試輸入幾個值 : 

IMAG0191

(預料中)   

But!!!!  同樣的一行code,改用 jQuery 1.9.1 之後

IMAG0191

(預料中)

嘗試輸入幾個值

發現還是 0,他只會抓取你一開始的value值,使用者後來輸入的就無法動態抓到

IMAG0191

(靠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 DOM querySelectorAll()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 所以記得是相反的啊 ~_~

 

 

 

arrow
arrow
    全站熱搜

    小雕 發表在 痞客邦 留言(1) 人氣()