我找到了这个问题的一些答案,但没有一个为我工作
我想要的是调用函数myFunc()
而不刷新href
所需的页面
这个href
正在使用GET
请求执行他的工作,如果有人有脚本阻止,我希望它保持原状。它也必须在没有脚本的情况下工作
但是当有人没有放弃脚本时,我想不要去href
重定向,而是myFunc()
onclick
我尝试过这样的事情:
在javascript:
function onClickFunc(somedata){
event.preventDefault();
myFunc(somedata);
}
at 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
内时,它就会起作用。
请注意,这不是解决问题,因为有脚本块的人会失去使用我网站的可能性
这个解决方案有什么问题?
答案 0 :(得分:3)
两件事:
onXyz
属性样式处理程序包含 JavaScript代码,因此不需要javascript:
伪协议。
因为您正在编写函数调用,如果要访问事件对象,则需要将其传递给函数
所以:
onclick="onClickFunc(event, {{ some_django_data.id }})"
然后
function onClickFunc(event, somedata) {
event.preventDefault(); // Stops the default behavior of following the link
// ...
}
如果您需要支持真正的旧版浏览器(或浏览器徘徊在自己和表现,就像真正的老浏览器一样[我正在看着你,IE9-IE11]),你就是这样了需要考虑事件对象上preventDefault
不存在的可能性。但好消息是,return false
属性处理程序中的onXyz
会阻止默认操作。所以:
所以(请注意return
):
onclick="return onClickFunc(event, {{ some_django_data.id }})"
和(在此注意return
):
function onClickFunc(event, somedata) {
if (event.preventDefault) {
event.preventDefault(); // Stops the default behavior of following the link
}
// ...
return false;
}
答案 1 :(得分:0)
您的代码位于正确的轨道上,但您忘记将事件对象传递给javascript函数。
查看此工作示例:
function myfunc(event, data) {
event.preventDefault();
alert("HELLO");
return false;
}
<a onclick="myfunc(event, 'foo')" href="www.google.com">TESTER</a>
注意:您实际上不需要指定JS协议。看看这个SO post。