我在一个地方定义了一个全局函数:
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"
)。
如何使这项工作?
答案 0 :(得分:4)
根据当前实现,this
不引用调用该函数的元素。它指的是window
个对象。
您需要将当前元素上下文(即this
)传递给函数
onClick='addToCart(this)'
并修改函数以接受元素作为参数。
function addToCart (elem){
var prodText = $(elem).parent().siblings(".item1").text();
$("#"+prodId+"shopC").children(".item1").text(prodText);
alert(prodText);
}
答案 1 :(得分:1)
普通函数中基本上this
将指向window
。您必须将this
上下文传递给内联处理程序onClick='addToCart(this)'
。接收它并在事件处理程序中使用它,如下所示。
function addToCart (_this){
var prodText = $(_this).parent().siblings(".item1").text();
答案 2 :(得分:0)
你必须在你内联调用addToCart函数的地方传递这个关键字然后你可以捕获那个元素
onClick='addToCart(this)'
答案 3 :(得分:0)
var sLoggedInUser = <%= Html.Json(PageMethods.GetSession_LoggedInUserName())%>;
对象未指向您添加this
函数的对象。它指向onClick
对象。
您需要将window
作为参数传递给您的函数。
this
并在function addToCart (trigger) { // Code goes here }
中致电addToCart(this)
。
在此处详细了解javascript中的this
。