我的代码:
<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错误?
答案 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();
}