问题描述
代码片段function txtProductCountBlurred(txt_product_count){ var s_product_count = txt_product_count.value.trim(); var txt_o_product_count = txt_product_count.nextSibling; //old hidden product couunt var o_product_count =txt_o_product_count.value.trim(); 。。。。。。。。。。。}html代码<td class="carttd-4"><input value="<%=num%>" onkeypress=" if((arguments[0] || window.event).keyCode==13)txtProductCountBlurred(this);" onblur="txtProductCountBlurred(this);" class="cartcurrent"/><input type="hidden" value="<%=num%>" /></td>执行到var o_product_count =txt_o_product_count.value.trim();就不行了??不知道什么原因啊
解决方案
nextSibling就是指下一个兄弟元素.引用var o_product_count =txt_o_product_count.value.trim();就不行了是因为txt_product_count.nextSibling的结果并不是<input type="hidden" value="<%=num%>" />元素, 而是因为<input value="<%=num%>" onkeypress=" if((arguments[0] || window.event).keyCode==13)txtProductCountBlurred(this);" onblur="txtProductCountBlurred(this);" class="cartcurrent"/>不和<input type="hidden" value="<%=num%>" />在同一行, 所以txt_product_count.nextSibling是这两个元素之间的一个空的回车(或是空的字符), 所以引用var txt_o_product_count = txt_product_count.nextSibling得到的实际上就这个空字符串, 可以打出txt_o_product_count.nodeValue来证实这一点.如果想用这个函数来拿到第二个input元素, 要将这个input写在同一行, 也就是;...urred(this);" class="cartcurrent"/><input type="hidden" value="<%=num%>" />中间不要有空格.ps: 我测试的时候发现我的ff不好像不支持trim()这个函数, 如果楼主按上面的没有结果, 把trim()这个函数去掉在试.
解决方案二:
哈哈, 显然我是一个js外行!
解决方案三:
Javascript中根本没有trim()这个函数.所以会报对象没有此方法或属性的错误.nextSibling得不到是由于两个标签之间出现了间隔.浏览器会把每个文本当做一个TextNode对象(Javascript中并没有TextNode对象,这里只是起一个说明作用)进行处理.所以你得到的nextSibling就是一个空字符串组成的TextNode对象.所以得到的txt_o_product_count是一个对象.但是调用它的value属性就会报错.第一点可以通过自己写一个trim函数进行处理.第二个问题把两个input之间的间隔去掉就可以了.