两个相同的javascript代码以不同的方式表现(在不同的浏览器中)

时间:2011-06-14 09:30:22

标签: javascript jquery

我有一个名为frmOrderReschedule的表单和一个隐藏元素frmOrderReschedule。 我试图以这种方式访问​​它 -

document.frmOrderReschedule.newSalesOrderNumber.length

它给了我错误document.frmOrderReschedule.newSalesOrderNumber.length是undefined,但是当我尝试以fallowing的方式它正常工作

document.getElementsByName('newSalesOrderNumber').length;  

这种情况只发生在Mozila。任何人都可以对此有所了解,为什么会发生这样的事情。 在此先感谢!!!

1 个答案:

答案 0 :(得分:3)

根据您的评论我推断,该字段可以出现一次或多次。在这种情况下,document.frmOrderReschedule.newSalesOrderNumber(或document.forms["frmOrderReschedule"].elements["newSalesOrderNumber"])可以返回不同的类型。

如果有多个控件,它将返回一个集合,该集合将具有length属性。如果只有一个控件,那么它将返回对该控件的直接引用,这显然没有长度。这意味着,如果您使用该语法,则需要区分这两种变体(或者甚至是三种变体,以防该字段不存在):

var x = document.forms["frmOrderReschedule"].elements["newSalesOrderNumber"];
if (x) {
    if (x.length) {
        alert("There are " + x.length + " controls.")
    } else {
        alert("One control with value: " + x.value);
    }
} else {
    alert("None");
}

工作示例:http://jsfiddle.net/H4Lks/1/

另一方面,

document.getElementsByName('newSalesOrderNumber') 始终会返回一个集合,即使没有集合,也不会有集合,因此它总是有length