将undefined传递给jquery val函数

时间:2015-01-19 06:38:52

标签: jquery

我的代码:

<select id="carlist">
  <option value="volvo">Volvo</option>
</select>

function getVal(e, v) {
    return e.val(v);
}

var elem=$('#carlist');

alert(elem.val()); // returns volvo
alert(getVal(elem)); // returns [Object Object]

我希望两个警报打印相同,但第二个警告失败,这是一个jquery错误?

jsfiddle

5 个答案:

答案 0 :(得分:2)

getVal(e, v) 

有两个参数,你传递一个,e.val(v)应该是e.val()

它应该像

function getVal(e) {
return e.val();
}

答案 1 :(得分:1)

至于为什么这种行为有意义:在jQuery中,你可以不带参数调用e.val(),它会返回元素 e 的当前值属性,或者调用它使用一个e.val(newVal)来设置新值。如果你使用后者,jQuery将返回元素,以使链接成为可能。

即使你在没有第二个参数的情况下调用你的函数getElement,它仍然会区分undefined和没有参数,因此会将元素的值设置为undefined,而不是返回当前价值。

如果您想重载您的功能,可以使用:

function getVal(e, v) {
    if(v === undefined){
       return e.val();
    else{
       return e.val(v);
    }
}

答案 2 :(得分:0)

删除返回方法中的v。并且您在函数中使用了一个参数,因此您可以选择删除v

function getVal(e) {
    return e.val(); // < remove 'v' here
}

答案 3 :(得分:0)

function getVal(e, v) {
    return e.val(v);
}

应该是

function getVal(e) {
    return e.val();
}

答案 4 :(得分:0)

从JCOC611开始,我最终追踪到jQuery代码。问题是,当jQuery检查val是否接收到参数时,它会检查参数的数量,因此将undefined传递给val()仍然会调用接收参数的重载。

因此,为jQuery&#39; val()等函数编写代理的正确方法是:

function getVal(e, v) {
   return arguments.length>1 ? e.val(v) : e.val();
}