2014-12-03 72 views
0

我是一個後端人,我們的前端人員剛剛離開,雖然我「認爲」我解決了這個問題,但我想知道發生了什麼事情。爲什麼我的'type'屬性沒有被「看到」?

所以我得到這個錯誤,從腳本Uncaught TypeError: Cannot read property 'indexOf' of undefined - 在鉻39.0.2171.65

瀏覽器給我看了這條線是造成該問題:if (type.indexOf('select') == 0),從中我明白,type是不確定的。

那麼什麼是type

$('form :input[type!=hidden][type!=submit]').each(function() { 
... 
var type = $(this).attr('type'); 
... 
} 

我調試了我的元素,結果發現其中有16個。

當他們中的每一個運行此$(this).attr('type')聲明,我得到這個錯誤Uncaught TypeError: undefined is not a function$(this).type回報undefined,雖然this.type定義並具有適當的值,如果我用這條線,一切都似乎是工作作爲預期。

這個問題可能是由於jQuery-ui的升級,從1.8到1.11,但我真的不知道,並且這http://api.jquery.com/attr/網站也沒有說清楚。

所以我想知道,如果可能的話,這可能是如何工作的,如果我使用的修復程序足夠好,或者我是否應該做其他事情。

+1

將$(this).attr('type')'更改爲'$(this).prop('type')'。 – 2014-12-03 18:08:42

+0

有可能您的一些輸入沒有設置類型? – 2014-12-03 18:11:46

+0

'this.type'是檢查輸入類型的最合適的方法,真的不需要在這裏使用任何jQuery對象 – 2014-12-03 18:11:48

回答

3

Suchit的回答是正確的。然而,要回答你爲什麼會發生這樣的問題,爲什麼它以前工作過,等等......這需要一些解釋。

在javascript中屬性和屬性是有區別的。有時候既有屬性又有屬性,但有時候不是。例如,對於有type="text"的輸入元素,既有一個稱爲type的屬性,又有一個稱爲type的屬性。

但是,在這種情況下,您似乎在尋找一個select元素,它沒有「type」屬性,但會有一個type屬性。

在jQuery 1.6之前,jQuery的.attr()方法在某些情況下會返回類型和屬性。這在1.6中已被棄用,儘管它可能仍然有效。我的猜測是,在某個時間點(也許在jQuery 1.8之後),實際的功能被刪除了,從jQuery 1.6開始已經被棄用了。

看起來這個區域在jQuery 1.9中發生了變化。

http://jquery.com/upgrade-guide/1.9/#attr-versus-prop-

編輯:

經進一步調查,我看不出如何做到這一點jQuery的1.8,在所有工作過。該行爲在1.6版本中發生了變化,並且不允許繼續按照我第一次懷疑的方式工作。

我已經創建了一個jsfiddle來演示這個。您可以通過更改註釋來包含正確的版本來運行它們,並且可以看到差異。

http://jsfiddle.net/3104wcbp/

是否有可能將HTML改爲增加他們在那裏以前輸入的語句select語句?

1

嘗試使用:

$(this).prop('type'); 

演示在這裏:

<!DOCTYPE html> 
<html> 
<body > 
<script> 
$(document).ready(function(){ 
    $('form :input[type!=hidden][type!=submit]').each(function() { 
     var type = $(this).prop('type'); 
     console.log(type); 
     }); 
}); 
    </script> 
    <form> 
<input type='text' name ="name"value="something1"> 
<input type='radio'name ="r" value="something2"> 


</form> 

注: VAR類型= this.type;也將起作用。

+0

這將是更合適的示例'',使用default輸入類型(它是'text') – 2014-12-03 18:19:43

相關問題