jQuery“this”范围问题
jQuery `this` scope issue
我在一个地方定义了一个全局函数:
function addToCart (){
var prodText = $(this).parent().siblings(".item1").text();
$("#"+prodId+"shopC").children(".item1").text(prodText);
alert(prodText);
}
然后,我想在具有内联onClick
事件的HTML元素中调用它:onClick='addToCart()
'
它不起作用,但如果我将函数代码直接放在onClick
事件中,它会起作用,所以这一定是this
范围的问题。关于this
范围有很多问题/解释,但我必须承认,我错过了这个特定案例的简单直接答案(我也尝试过成功地使用"use strict"
)。如何做到这一点?
根据当前实现,this
没有引用调用函数的元素。它是指window
对象。
您需要将当前元素上下文(即this
)作为传递给函数
onClick='addToCart(this)'
并修改函数以接受元素作为参数。
function addToCart (elem){
var prodText = $(elem).parent().siblings(".item1").text();
$("#"+prodId+"shopC").children(".item1").text(prodText);
alert(prodText);
}
基本上,普通函数内的this
将指向window
。您必须将this
上下文传递给内联处理程序onClick='addToCart(this)'
。接收它并在事件处理程序中使用它,如下所示。
function addToCart (_this){
var prodText = $(_this).parent().siblings(".item1").text();
您必须在内联调用addToCart函数时传递此关键字,然后才能捕获元素
onClick='addToCart(this)'
this
对象不指向添加了onClick
函数的对象,而是指向window
对象。
您需要将this
作为参数传递给您的函数。
function addToCart (trigger) { // Code goes here }
并在您的onClick
中呼叫addToCart(this)
。
在javascript中了解更多关于this
的信息。
相关文章:
- setInterval游戏循环的范围问题
- firefox中的Javascript事件范围问题
- jQuery“this”范围问题
- 可以't在quizz页面范围问题上用最终分数更新变量
- JavaScript 函数变量范围问题
- 奇怪的可变范围问题
- AngularJS中的范围问题
- 如何在 JavaScript for D3.js 中解决这样的范围问题
- 我可以设置这个吗'某事'在该服务中动态创建的嵌套对象中的服务?(可能是范围问题)
- Angular.js的多个rest调用范围问题
- Angular-$http范围问题
- setTimeout范围问题
- NodeJS回调范围问题
- javascript函数的可变范围问题
- 可能存在Javascript范围问题
- 函数之间的Javascript变量范围问题
- 单击视图时的应用器范围问题
- 全球不断改变价值.可能通过引用或范围问题传递?帮助!链接中的详细示例
- 挖空 - 单击绑定到对象函数 - 范围问题
- Angular 在 http 请求后不更新页面(范围问题?