2010-01-28 198 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]; 
相关问题