Javascript 在事件中传递数据-dos和don';ts
我对在事件中传递数据有点困惑。我得到了不一致的结果,我想了解为什么Javascript 在事件中传递数据-dos和don';ts,javascript,jquery,events,Javascript,Jquery,Events,我对在事件中传递数据有点困惑。我得到了不一致的结果,我想了解为什么$(this).val()不能通过,但如果我事先声明它会通过。我理解为什么最后一个方法有效,但不理解为什么它返回nothing/undefined。有人能帮我澄清一下吗 编辑:对象的obj是 这些表达式的问题 obj.on('click',{val:this.value},tellmeagain); //undefined obj.on('click',{val:$(this).val()},tellmeagain); //ret
$(this).val()
不能通过,但如果我事先声明它会通过。我理解为什么最后一个方法有效,但不理解为什么它返回nothing/undefined。有人能帮我澄清一下吗
编辑:对象的obj
是
这些表达式的问题
obj.on('click',{val:this.value},tellmeagain); //undefined
obj.on('click',{val:$(this).val()},tellmeagain); //returns nothing
是在绑定时计算this.value
和$(this.val()
,而不是在事件发生时。不仅值没有更改,而且此
甚至不是您的元素(如果您的代码位于全局范围内或$.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);
只是因为值来自“obj”而不是“this”
你能详细说明一下吗?为什么
$(this)|
不是我的元素?它使用第1个函数报告值。因为在您编写{val:this.value}
的范围内,this
没有理由成为您的元素。它是什么,我们无法从您显示的代码中分辨出来。啊,检查一下我在OP中包含的小提琴。它是一个输入。@kcdwayne在小提琴中,这个
,在最外部可见的范围内,不是一个输入。它是窗口
。传递数据
对象并不常见,因为通常很容易从回调或使用闭包获得所需内容。
var rhfle = {val:this.value}; // what do you think is this ? it's window
obj.on('click',rhfle,tellmeagain);
value = obj.val()
this.value ?????