0

我正在尝试对某些超链接使用 preventDefault 操作来防止它们被激活,而不是调用一些 ajax。但是,它似乎不起作用。

我正在使用的代码如下: 我有以下代码:

    $("#" + container_id + " a[id^=read_more_link]").click(function(event){
        alert($(this).html());
        event.preventDefault();
});

现在有趣的是警报框会触发,因此它肯定会注册点击事件,但它似乎无法识别 preventDefault() 调用。

我尝试了一个简单的测试来简化我的代码,但它仍然不起作用:

<a id="read_more_link" data-article_id="1" href="news/1">Read More</a>

    $("#read_more_link").on("click", function(event){
        alert("test");
        event.preventDefault();
    });

警报框触发,但页面仍然跟随链接。

注意:如果我使用 'Return False' 但不使用 preventDefault

4

3 回答 3

1

给你!

function(e){
    e = e || window.event;
    e.preventDefault();    
}

小提琴:http: //jsfiddle.net/rXCcB/2/

编辑:正如11684正确指出的那样,详细的解释会有所帮助。

一些浏览器将其识别ewindow.event,其中包含有关事件的所有信息;在这种情况下,您尝试操纵的点击事件。其他一些浏览器没有,所以函数的第一步发生的是在所有浏览器上的标准化e。最终结果是每个对 的引用都e指向window.event,此时您可以安全地使用e.preventDefault(),知道所有浏览器都准确理解您的意思。

于 2012-12-19T19:10:47.080 回答
1

似乎您正在阻止具有某些父级的链接的默认操作,那么您的选择器应该是这样的:

我的html是:

<p id='aaa'>
   <a id='read_more_link' href='#'>adf</a>
</p>

jQuery:

var container_id = $('#aaa');
$("a[id^='read_more_link']", container_id).click(function(event) {
   alert($(this).html());
   event.preventDefault();
});

查看小提琴:http: //jsfiddle.net/EEZEe/

看看这是否对您有帮助。

于 2012-12-19T19:13:51.627 回答
1

至少有一种更简单、更好的方法:

更轻松:

$("#" + container_id + " a[id^=read_more_link]").click(function(){
    alert($(this).html());
    return false;
});

无需使用事件参数,也无需调用函数。

更好的:

使用按钮而不是链接:

<p id='aaa'>
   <button id='read_more_link' type='button'>adf</button>
</p>

那么你就不会遇到这个问题,因为正是为这个事件制作了一个按钮。链接是为链接而制作的,return false或者preventDefault()是,虽然它们可能有效,但它们是变通方法。

于 2012-12-19T19:22:09.280 回答