jquery $(this).attr('href') returns 未定义
jquery $(this).attr('href') returns undefined
我有一个非常简单的代码
HTML
<a class="qqPopupCTA" href="http://example.com">Button</a>
JS
$qqPopupCTA = $('.qqPopupCTA');
function showForm(e){
e.preventDefault();
var targetPageUrl = $(this).attr('href');
// do stuff
}
$qqPopupCTA.on('click', function(e){showForm(e);});
但是我一直收到未定义的 href。 Console.log($(this)) returns "window" 和 console.dir($(this)) returns "e.fn.init[1]"
知道我做错了什么吗?代码非常简单,所以我肯定遗漏了一些明显的东西。
我想我已经尝试了一切。
试试这个:
$qqPopupCTA.on('click', showForm); // pass function name(ref)
或者
$qqPopupCTA.on('click', function(e){
showForm.call(this,e);
});
当您调用 showForm(e)
时,上下文 (this
) 不是 showForm
中的锚点对象,它是 window 对象。
因此您可以将函数引用作为点击处理程序传递
$qqPopupCTA.on('click', showForm);
$qqPopupCTA = $('.qqPopupCTA');
function showForm(e) {
e.preventDefault();
var targetPageUrl = $(this).attr('href');
alert(targetPageUrl)
// do stuff
}
$qqPopupCTA.on('click', showForm);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a class="qqPopupCTA" href="http://example.com">Button</a>
或使用 .call()
将自定义上下文传递给 showForm
函数
$qqPopupCTA.on('click', function (e) {
showForm.call(this, e);
});
$qqPopupCTA = $('.qqPopupCTA');
function showForm(e) {
e.preventDefault();
var targetPageUrl = $(this).attr('href');
alert(targetPageUrl)
// do stuff
}
$qqPopupCTA.on('click', function(e) {
showForm.call(this, e)
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a class="qqPopupCTA" href="http://example.com">Button</a>
根据您的方法 this
在函数 setCurrent
中不引用调用事件的元素。它是 window
对象
绑定事件时只传递函数引用
$qqPopupCTA.on('click', showForm);
或者,您可以使用 bind()
$qqPopupCTA.on('click', function (e) {
showForm.bind(this)(e);
});
函数showForm是全局定义的,'this'指的是window对象。
showForm(e,this) 会将当前元素的引用提供给 function.so 通过 'this' 应该修复你未定义的 this
$('.qqPopupCTA').on('click', function showForm() {
var targetPageUrl = $(this).attr('href');
警报(targetPageUrl)
});
我有一个非常简单的代码
HTML
<a class="qqPopupCTA" href="http://example.com">Button</a>
JS
$qqPopupCTA = $('.qqPopupCTA');
function showForm(e){
e.preventDefault();
var targetPageUrl = $(this).attr('href');
// do stuff
}
$qqPopupCTA.on('click', function(e){showForm(e);});
但是我一直收到未定义的 href。 Console.log($(this)) returns "window" 和 console.dir($(this)) returns "e.fn.init[1]"
知道我做错了什么吗?代码非常简单,所以我肯定遗漏了一些明显的东西。
我想我已经尝试了一切。
试试这个:
$qqPopupCTA.on('click', showForm); // pass function name(ref)
或者
$qqPopupCTA.on('click', function(e){
showForm.call(this,e);
});
当您调用 showForm(e)
时,上下文 (this
) 不是 showForm
中的锚点对象,它是 window 对象。
因此您可以将函数引用作为点击处理程序传递
$qqPopupCTA.on('click', showForm);
$qqPopupCTA = $('.qqPopupCTA');
function showForm(e) {
e.preventDefault();
var targetPageUrl = $(this).attr('href');
alert(targetPageUrl)
// do stuff
}
$qqPopupCTA.on('click', showForm);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a class="qqPopupCTA" href="http://example.com">Button</a>
或使用 .call()
showForm
函数
$qqPopupCTA.on('click', function (e) {
showForm.call(this, e);
});
$qqPopupCTA = $('.qqPopupCTA');
function showForm(e) {
e.preventDefault();
var targetPageUrl = $(this).attr('href');
alert(targetPageUrl)
// do stuff
}
$qqPopupCTA.on('click', function(e) {
showForm.call(this, e)
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a class="qqPopupCTA" href="http://example.com">Button</a>
根据您的方法 this
在函数 setCurrent
中不引用调用事件的元素。它是 window
对象
绑定事件时只传递函数引用
$qqPopupCTA.on('click', showForm);
或者,您可以使用 bind()
$qqPopupCTA.on('click', function (e) {
showForm.bind(this)(e);
});
函数showForm是全局定义的,'this'指的是window对象。 showForm(e,this) 会将当前元素的引用提供给 function.so 通过 'this' 应该修复你未定义的 this
$('.qqPopupCTA').on('click', function showForm() { var targetPageUrl = $(this).attr('href'); 警报(targetPageUrl)
});