我正在尝试将Twitter与Twitter Bootsrap一起使用。
在下面的代码中,当我使用this.attr('href');
并获得TypeError: this.attr is not a function
时。
当我更改为$(this).attr('href');
时,我会Undefined
。
<a class="alert" href="list_users.php?id=123">Delete user</a>
<script src="bootbox.min.js"></script>
<script>
$(document).on("click", ".alert", function(e) {
e.preventDefault();
bootbox.confirm("Are you sure?", function(result) {
if (result) {
document.location.href = this.attr('href'); // doesn't work
document.location.href = $(this).attr('href'); // Undefined
}
});
});
</script>
有什么想法吗?
答案 0 :(得分:7)
这不再是你的jQuery事件回调函数,而是bootbox回调...尝试$.proxy
绑定上下文:
$(document).on("click", ".alert", function(e) {
e.preventDefault();
bootbox.confirm("Are you sure?", $.proxy(function(result) {
if (result) {
document.location.href = this.href;
}
}, this));
});
答案 1 :(得分:1)
问题在于this
或$(this)
不再指向链接,而是指向bootbox
- 回调。这可以通过存储$(this)
指向的变量来解决。请注意,如果您多次使用同一个对象,这也被认为是一种很好的做法。
$(document).on("click", ".alert", function(e) {
e.preventDefault();
var obj = this;
bootbox.confirm("Are you sure?", function(result) {
if (result) {
document.location.href = obj.href;
}
});