为什么jQuery .val()工作和js .value不起作用

时间:2016-03-17 08:36:03

标签: javascript jquery html

我遇到了jQuery .val()方法和本机js .value的问题。我有一个功能,我在2个不同的页面使用,我的HTML代码是:

<input type="hidden" name="checkEntreeLun" value=""/>
<input type="hidden" name="checkEntreeMar" value=""/>
<input type="hidden" name="checkEntreeMer" value=""/>
<input type="hidden" name="checkEntreeJeu" value=""/>
<input type="hidden" name="checkEntreeVen" value=""/>
<input type="hidden" name="checkEntreeSam" value=""/>
<input type="hidden" name="checkEntreeDim" value=""/>

对于其他页面,这是相同的代码,除了输入中有默认值。现在在我的js函数中,我需要获取每个输入的值。所以这就是我所拥有的:

for (i=0;i<days.length;i++){
        var nameEntree = "checkEntree"+days[i];
        var checkEntreeMatin = $("input[name='"+nameEntree+"']").val();

     //Do something with value ...
}

问题出现了,对于输入中没有默认值的页面,我可以使用document.getElementsByName("checkEntree"+days[i]).value而不是.val()方法获取值,当我使用.val()方法时可以在有默认值的页面上获取值。

为什么它使用方法而不使用其他方法,反之亦然?

1 个答案:

答案 0 :(得分:0)

$(someSelector)返回一个jQuery对象。 val()是一个出现在jQuery对象上的方法,它获取第一个或设置对象包含的所有Elements的值(如果选择器没有找到任何元素,则不执行任何操作)。

getElementsByName返回Node List,这是一个类似于数组的对象,其中每个成员都是一个HTML元素节点。它没有value属性,尽管每个HTML元素节点都有。

要使用getElementsByName,您需要明确访问各个元素,例如通过循环结果。

var elements = document.getElementsByName("checkEntree"+days[i]);
for (var j = 0; j < elements.length; j++) {
    elements[j].value = ...;
}