我对在事件中传递数据感到有些困惑。我得到了不一致的结果,我想理解为什么$(this).val()
没有通过,但如果我事先声明它。我理解为什么最后一个方法有效,但不知道为什么它没有返回/ undefined。有人可以帮我解决这个问题吗?
修改: obj
为<input id="test" value="myvalue" type="text">
obj = $('#test');
tellme = function(data){
alert(data);
}
obj.on('click',function(e){ tellme($(this).val()) }); //How I usually pass things
tellmeagain = function(event){
alert(event.data.val);
}
obj.on('click',{val:'test'},tellmeagain); //works
obj.on('click',{val:this.value},tellmeagain); //undefined
obj.on('click',{val:$(this).val()},tellmeagain); //returns nothing
value = obj.val()
obj.on('click',{val:value},tellmeagain); //works
答案 0 :(得分:1)
这些表达的问题
obj.on('click',{val:this.value},tellmeagain); //undefined
obj.on('click',{val:$(this).val()},tellmeagain); //returns nothing
是this.value
和$(this).val()
在绑定时计算 ,而不是在事件发生时计算。价值不仅没有改变,this
甚至不是你的元素(如果你的代码在全局范围内,或者在你的小提琴中的window
回调中,它可能是$.ready
)
为了更清楚,这一行
obj.on('click',{val:this.value},tellmeagain); //undefined
相当于
var rhfle = {val:this.value}; // what do you think is this ? it's window
obj.on('click',rhfle,tellmeagain);
答案 1 :(得分:0)
只是因为该值来自“obj”而不是“this”
value = obj.val()
this.value ?????