javascript - jQuery addClass() 在还使用 attr ("href"时不起作用,有些东西)

标签 javascript jquery html twitter-bootstrap

我想创建一个仅在第二次点击时有效的链接(以 Bootstrap 按钮的形式);在第一次点击时,它应该稍微改变一下它的外观。为此,我使用 .addClass(newClass) , .removeClass(oldClass) , 然后 attr("href", newUrl) .

(编辑) 澄清一下:一开始,链接( anchor )的 href 是“#”目标和一个 onlick 处理程序。该处理程序在第一次点击时执行,将从 anchor 中删除自身,而是在 href 中设置所需的目标 URL。属性。这应该会导致链接仅在第二次点击时重定向到其目标 URL。)

这几乎可以工作,但前提是我省略了 attr()环境。当它存在时,该类会在脚本退出后立即恢复为链接的旧类。当我在调试器中单步执行它时,该链接会按预期短暂更改其外观,但会在事件处理程序退出时变回原样。

这是 HTML 代码:

<a id="twoclick-vjffkrzw" onclick="enabletwoclickbutton('twoclick-vjffkrzw', 
'http://localhost/something.php?cmd=admin&amp;func=userdetail&amp;pk=53&amp;action=removerole&amp;rolepk=1')"
class="btn btn-xs btn-warning" href="#">Remove this</a>

脚本:

function enabletwoclickbutton(btn_id, url) {
    var whichbtn = '#' + btn_id;
    var btn = $(whichbtn);
    if (btn.hasClass("btn-warning")) {
        btn.off("click");
        btn.attr("href", url);
        btn.removeClass('btn-warning');
        btn.addClass('btn-danger');

    } else {
        console.log("Hey, this shouldnt happen.");
    }

}

我在 JS 和 jQuery 方面不是很有经验,所以这很可能是我犯的一个愚蠢的错误,但我就是看不出来。

最佳答案

使用 e.preventDefault() 来避免 anchor 的默认行为。

您的方式(但是我建议您使用下面的方式以提高可读性并便于以后修改。)

html

<a id="twoclick-vjffkrzw" onclick="enabletwoclickbutton(event,'twoclick-vjffkrzw', 'http://localhost/something.php?cmd=admin&amp;func=userdetail&amp;pk=53&amp;action=removerole&amp;rolepk=1')" class="btn btn-xs btn-warning" href="#">Remove this</a>

js

 function enabletwoclickbutton(e,btn_id, url) {
    var whichbtn = '#' + btn_id;
    var btn = $(whichbtn);
    if (btn.hasClass("btn-warning")) {
        e.preventDefault();
        //btn.off("click");
        btn.attr("href", url);
        btn.removeClass('btn-warning')
           .addClass('btn-danger');

    } else {
        console.log("Hey, this shouldnt happen.");
    }

}

推荐

不要混合你的 javascript 和 html,因为你可以在你的代码中看到它们很难阅读。您只能用 javascript 编写整个代码

例如。

$('#twoclick-vjffkrzw').click(function(e){
    var btn = $(this);
    if (btn.hasClass("btn-warning")) {
        e.preventDefault();
        //btn.off("click");
        btn.attr("href", 'http://localhost/something.php?cmd=admin&amp;func=userdetail&amp;pk=53&amp;action=removerole&amp;rolepk=1');
        btn.removeClass('btn-warning');
        btn.addClass('btn-danger');

    } else {
        console.log("Hey, this shouldnt happen.");
    }
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a id="twoclick-vjffkrzw" class="btn btn-xs btn-warning" href="#">Remove this</a>

关于javascript - jQuery addClass() 在还使用 attr ("href"时不起作用,有些东西),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39208695/

相关文章:

javascript - 强制现有客户端网页重新加载 - 仅使用 JSON(无评估)

php - 使用 HTML 表单和 PHP 更新 MySQL

html - 如何在 pandas dataframe.to_html() 中设置单元格对齐方式

javascript - AngularJS 禁用键的方法

javascript - 无法使用jquery从外部url获取json

javascript - 在 AngularJS 中的页面之间共享数据返回空

jquery - 当元素使用 jQuery 离开屏幕时激活滚动条?

javascript - 单击事件在 jQuery 对话框中不起作用

javascript - 如何使用按钮代替表单外的输入?

javascript - 使用 JavaScript 随机化一组现有图像的布局