在事件中传递数据 - 注意事项

时间:2014-02-13 18:02:19

标签: javascript jquery events

我对在事件中传递数据感到有些困惑。我得到了不一致的结果,我想理解为什么$(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

Fiddle of code.

2 个答案:

答案 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  ?????