我找到了这个问题的一些答案,但没有一个对我有用。
我想要的是调用函数 myFunc()
而不刷新 href
想要的页面。
这个 href
正在通过 GET
请求完成他的工作,我希望它保留下来,因为如果有人有脚本 block 。它也必须在没有脚本的情况下工作。
但是,当有人没有禁用脚本时,我不想去 href
重定向的地方,而是执行 myFunc()
onclick
我尝试过这样的事情:
在 JavaScript 中:
function onClickFunc(somedata){
event.preventDefault();
myFunc(somedata);
}
在 html 中:
<a onclick="javascript:onClickFunc({{ some_django_data.id }})" href="?current={{ some_django_data.id }}{% if other_django_data %}&page={{ other_django_data.number }}{% endif %}">
当我用 #
替换 href
主体并将 javascript:myFunc({{ some_django_data.id }})
放入 onclick 中时
然后就可以了。
但这不是解决方案,因为有脚本 block 的人将失去使用我的网站的可能性。
这个解决方案有什么问题?
最佳答案
有两件事:
onXyz
属性样式处理程序包含 JavaScript 代码,因此不需要javascript:
伪协议(protocol)。因为您正在编写函数调用代码,所以如果您想要访问事件对象,则需要将其传递到函数中
所以:
onclick="onClickFunc(event, {{ some_django_data.id }})"
然后
function onClickFunc(event, somedata) {
event.preventDefault(); // Stops the default behavior of following the link
// ...
}
<小时/>
如果您需要支持非常旧的浏览器(或者浏览器本身步履蹒跚并且表现像非常旧的浏览器[我正在看着你,IE9-IE11]),那么您需要考虑事件对象上不存在 preventDefault
的可能性。不过,好消息是,onXyz
属性处理程序中的 return false
会阻止默认操作。所以:
所以(注意返回
):
onclick="return onClickFunc(event, {{ some_django_data.id }})"
和(请注意此处的返回
):
function onClickFunc(event, somedata) {
if (event.preventDefault) {
event.preventDefault(); // Stops the default behavior of following the link
}
// ...
return false;
}
关于javascript - 如何使用(out)jquery禁用href并立即调用onclick?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38773025/