2010-01-28 242 views
4

我有一個gridview在其第3個單元格中,有文本框控件,我在onchange上調用javascript函數。childNodes不工作在Firefox和Chrome,但在IE中工作

一些身體能告訴我這是爲什麼不能在Firefox和Chrome的工作,但在IE

grd.rows[rowindex].cells[3].childNodes[0].value 

工作在IE中返回正確的值,但無法在Chrome和Firefox(In FF and Chrome it return undefined)?

請同時提出解決方案來解決這個問題。

編輯

alert(grd.rows[ri].cells[3].childNodes[0].value);//IE value=correct value, FF and chrome value=undfined 
alert(grd.rows[ri].cells[3].childNodes[1].value);//IE value=undfined, FF and Chrome value= correct value 

感謝

回答

3

我相信這是因爲IE忽略僅包含換行符和製表符的文本節點。我個人更喜歡他們被忽略,但我寧願在瀏覽器中保持一致。

<p><!-- This comment represents a text node. 
    --><em>text</em> 
</p> 
2

嘗試 grd.rows [rowIndex位置] .cells [3] .childNodes [1] .value的

或最好的,看看錶在集成開發人員工具

+0

PLZ看看我的問題我的編輯部分.....這是哪裏表中集成開發工具? – 2010-01-28 13:41:34

0

如果你正在尋找的文本,使用grd.rows [rowIndex位置] .cells [3] .childNodes [0]。數據對非IE瀏覽器。文本節點的元素節點

var oCell = grd.rows[rowindex].cells[3]; 
alert(oCell.textContent || oCell.innerText) 

獲取文本值的

獲取文本值(更不安全相比前)

var oText = grd.rows[rowindex].cells[3].childNodes[0]; 
alert(oCell.data || oCell.value) 
+0

所有瀏覽器,但IE實現DOM-Level-2(大約3),IE實現所謂的DOM-Level-0--它們自己在DOM上的投影。 – 2010-01-28 13:53:29

0

由於ChaosPandion說,IE忽略空白文本的節點。下面應該跨瀏覽器工作:

var cell = grd.rows[rowindex].cells[3]; 
for (var textbox=cell.firstChild; textbox.nodeType!==1; textbox=textbox.nextSibling); 
alert(textbox.value); 

但是,你說你在onchange上調用函數。 推測這意味着有問題的文本框的onchange事件。 在這種情況下,事件處理程序中的事件參數應該有一個指向文本框的指針。 查看目標或srcElement屬性。例如

function onChange(e) { 
e = e || window.event; 
var textbox = e.target || e.srcElement; 
alert(textbox.value); 
} 
0

嘗試getElementsByTagName()而不是ChildNodes。它將用於FF,Chrome和IE。

1

@ChaosPandion:

嘿朋友不要使用此類檢查的的childNodes。

childNodes的計數有所不同。有些瀏覽器包含空的textNodes,有些則不包含。在我相信你所描述的這種操作中,最好使用父母的getElementsByTagName()方法。這樣,你所尋找的每個孩子的孩子數和指數都是一致的。

只需檢查您的瀏覽器的名稱。

如果是IE然後忽略空文本節點,那麼其中的childNode比其他瀏覽器少一個數字。

例如。

var isIE = navigator.appName; 
if (isIE == "Microsoft Internet Explorer") {     
    var removeProductID = document.getElementById(obj.childNodes[0].id).getAttribute("abc"); 
} 
else { 
    var removeProductID = document.getElementById(obj.childNodes[1].id).getAttribute("abc"); 
} 

希望這會有所幫助。享受編碼。

1

試試這個。我有同樣的問題,這個問題是解決了只需更換「的childNodes」與「兒童」

alert(grd.rows[ri].cells[3].children[0].value); 
1

Ishwar不斷變化的childNodes孩子爲我工作的答案。

0

使用children[0],而不是ChildNode如下:

var oText = grd.rows[rowindex].cells[3].children[0]; 
相關問題