强制mailto标记,以便在DOM加载后执行正确的函数

时间:2015-08-06 06:40:33

标签: javascript jquery html email

我的网站上有我的电子邮件地址,人们开始使用该地址发送垃圾邮件。所以我决定我需要升级网站上电子邮件地址的安全性。

我更改了您必须单击电子邮件地址才能查看的网站(或点击它以打开邮件客户端)。

未处理的HTML如下所示:

<a href='#' address='mailto:person(at)example(dot)co(dot)za'>Click here to view</a>

JavaScript看起来像这样,并在window.load

上执行
$("a[address]").click(function (event) {
        event.preventDefault();
        var address = $(this).attr("address");
        while(address.indexOf("(at)") !== -1){address = address.replace("(at)", "@")}
        while(address.indexOf("(dot)") !== -1){address = address.replace("(dot)", ".")}
        $(this).attr("href", "mailto:" + address);
        $(this).html(address);
    })

用户点击a标记。电子邮件地址显示正确。 但是如果我再次点击它(请记住href现在是mailto:),它就不会打开邮件客户端。

如何强制浏览器更新mailto代码的初始点击事件。

3 个答案:

答案 0 :(得分:2)

如果您想点击链接以获得关注链接,请不要说event.preventDefault();

答案 1 :(得分:1)

我找到了解决方案。我在JS的末尾添加了以下代码:

$(this).unbind("click");

这是因为在第一次单击标记后仍然绑定了单击。知道是否有办法强迫&#34;强迫&#34;使用JS打开邮件客户端。

新的JS代码如下所示:

$("a[address]").click(function (event) {
        event.preventDefault();
        var address = $(this).attr("address");
        while(address.indexOf("(at)") !== -1){address = address.replace("(at)", "@")}
        while(address.indexOf("(dot)") !== -1){address = address.replace("(dot)", ".")}
        $(this).attr("href", "mailto:" + address);
        $(this).html(address);

       // this is the new code
        $(this).unbind("click");
    })

答案 2 :(得分:0)

您可以检查该元素是否具有属性,并在单击该属性后将其删除,然后在该属性存在时仅删除preventDefault

$("a[address]").click(function (event) {
    if($(this).attr('address')){
        event.preventDefault();
        var address = $(this).attr("address");
        while(address.indexOf("(at)") !== -1){address = address.replace("(at)", "@")}
        while(address.indexOf("(dot)") !== -1){address = address.replace("(dot)", ".")}
        $(this).attr("href", "mailto:" + address);
        $(this).html(address);
        $(this).removeAttr('address');
    }
});