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

标签 javascript jquery ajax

我找到了这个问题的一些答案,但没有一个对我有用。
我想要的是调用函数 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 的人将失去使用我的网站的可能性。
这个解决方案有什么问题?

最佳答案

有两件事:

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

  2. 因为您正在编写函数调用代码,所以如果您想要访问事件对象,则需要将其传递到函数中

所以:

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/

相关文章:

ajax - 自动将焦点设置在 p :editor on page load

javascript - JS计算空格

javascript - jQuery(this).attr ('id' ) 返回未定义

javascript - 为什么在 TinyMCE 中保存列表会添加额外的列表标签?

JavaScript 读取 cookie 不起作用

jquery $(this).parent()... 无法从外部调用的函数中工作

jQuery AJAX Web 服务仅在本地运行

javascript - 没有得到 XMLHTTPRequest 的响应

javascript - BaconJS observable zip,示例属性映射失败

javascript - jQuery.on 函数不起作用