我有一个非常简单的代码
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))返回“window”,console.dir($(this))返回“e.fn.init [1]”
知道我做错了什么吗?代码非常简单,所以我必须遗漏一些明显的东西。
我想我已经尝试了一切。
答案 0 :(得分:1)
当您致电showForm(e)
时,上下文(this
)不是showForm
内的锚点对象,它是窗口对象。
因此您可以将函数引用作为单击处理程序
传递$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>
使用showForm
.call()
函数
$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>
答案 1 :(得分:0)
试试这个:
$qqPopupCTA.on('click', showForm); // pass function name(ref)
或者
$qqPopupCTA.on('click', function(e){
showForm.call(this,e);
});
答案 2 :(得分:0)
根据您的方法,函数this
中的setCurrent
未引用调用该事件的元素。它是window
对象
只需将函数引用传递给绑定事件
$qqPopupCTA.on('click', showForm);
或者,您可以使用bind()
$qqPopupCTA.on('click', function (e) {
showForm.bind(this)(e);
});
答案 3 :(得分:0)
showForm函数是全局定义的,'this'是指window对象。 showForm(e,this)将为函数提供当前元素的引用。传递'this'应该修复你未定义的这个
答案 4 :(得分:0)
$('。qqPopupCTA')。on('click',function showForm(){ var targetPageUrl = $(this).attr('href'); 警报(targetPageUrl)
});