如何使用(out)jquery立即调用href并调用onclick?

时间:2016-08-04 16:42:26

标签: javascript jquery ajax

我找到了这个问题的一些答案,但没有一个为我工作 我想要的是调用函数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内时,它就会起作用。
请注意,这不是解决问题,因为有脚本块的人会失去使用我网站的可能性 这个解决方案有什么问题?

2 个答案:

答案 0 :(得分:3)

两件事:

  1. onXyz属性样式处理程序包含 JavaScript代码,因此不需要javascript:伪协议。

    < / LI>
  2. 因为您正在编写函数调用,如果要访问事件对象,则需要将其传递给函数

  3. 所以:

    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