未触发jQuery preventDefault()

未触发jQuery preventDefault(),jquery,event-handling,jquery-events,Jquery,Event Handling,Jquery Events,我有以下代码: $(document).ready(function(){ $("div.subtab_left li.notebook a").click(function(event) { event.preventDefault(); return false; }); }); 但是当我单击元素时。。它不会阻止默认操作。。为什么? 将代码修改为: $(document).ready(function(){ $("div.subtab_l

我有以下代码:

$(document).ready(function(){

    $("div.subtab_left li.notebook a").click(function(event) {
    event.preventDefault();
    return false;   
    });

});
但是当我单击元素时。。它不会阻止默认操作。。为什么?

将代码修改为:

$(document).ready(function(){

    $("div.subtab_left li.notebook a").click(function() {
    e.preventDefault();
    alert("asdasdad");
    return false;   
    });

});
它停止默认操作,但不发出警报。。我在jQuery文档中找不到任何答案

完整代码如下所示:

$(document).ready(function(){

$('#tabs div.tab').hide();
$('#tabs div.tab:first').show();
$('#tabs ul li:first').addClass('active');

$('#tabs ul li a').click(function(){
$('#tabs ul li').removeClass('active');
$(this).parent().addClass('active');
var currentTab = $(this).attr('href');
$('#tabs div.tab').hide();
$(currentTab).show();
return false;
});

    $("div.subtab_left li.notebook a").click(function(e) {
    e.preventDefault();
    e.stopPropagation();
    e.stopImmediatePropagation();

    alert("asdasdad");
    return false;

    });

});
HTML结构是:

<div id="tabs">
<ul id="nav">
<li><a id="tab1" href="#tab-1"></a></li>
<li><a id="tab2" href="#tab-2"></a></li>
<li><a id="tab3" href="#tab-3"></a></li>
<li><a id="tab4" href="#tab-4"></a></li>
</ul>

<div class="tab" id="tab-1">
        <script type="text/javascript">$(document).ready(function(){$("ul.produse li").hover(function () {
        $("ul.produse li").removeClass('active');$(this).addClass('active');}, function () {$(this).removeClass('active');});});
    </script>

    <div class="subtab_left"> 
        <ul>
            <li class="notebook"><a href="#">1</a></li>
            <li class="netbook"><a href="#">2</a></li>      
            <li class="allinone"><a href="#">2</a></li> 
            <li class="desktop"><a href="#">2</a></li> 
            <li class="procesoare"><a href="#">2</a></li> 
            <li class="placi_video"><a href="#">2</a></li>    
            <li class="hdd_desktop"><a href="#">2</a></li>
            <li class="tv_plasma"><a href="#">2</a></li>
            <li class="tv_lcd"><a href="#">2</a></li>
            <li class="telefoane_mobile last_item"><a href="#">2</a></li>
        </ul>
    </div>

$(document).ready(function(){(“ul.produse li”).hover(function(){ $($ul.produse li”).removeClass('active');$(this.addClass('active');},函数(){$(this.removeClass('active');});
试试这个:

$("div.subtab_left li.notebook a").click(function(e) {
    e.preventDefault();
});

更新

这就是你的问题——你必须为一些
a
元素单击事件处理程序。在本例中,附加处理程序的顺序很重要,因为它们将按该顺序被激发

这是你想要的行为

这应该是您的代码:

$(document).ready(function(){


    $('#tabs div.tab').hide();
    $('#tabs div.tab:first').show();
    $('#tabs ul li:first').addClass('active');

    $("div.subtab_left li.notebook a").click(function(e) {
        e.stopImmediatePropagation();
        alert("asdasdad");
        return false;
    });

    $('#tabs ul li a').click(function(){
        alert("Handling link click");
        $('#tabs ul li').removeClass('active');
        $(this).parent().addClass('active');
        var currentTab = $(this).attr('href');
        $('#tabs div.tab').hide();
        $(currentTab).show();
        return false;
    });

});
请注意,附加处理程序的顺序已交换,
e.stopImmediatePropagation()
用于阻止另一个单击处理程序触发,而
return false
用于停止跟踪链接的默认行为(以及停止事件冒泡。您可能会发现只需要使用
e.stopPropagation

如果您删除
e.stopImmediatePropagation()
,您会发现第二个单击处理程序的警报将在第一个警报后触发。删除
return false
将不会影响此行为,但会导致浏览器跟随链接

注意

一个更好的解决办法可能是确保选择器返回完全不同的元素集合,这样就没有重叠,但这可能并不总是可能的,在这种情况下,上面描述的解决方案可能是一种考虑的方式。


  • 我不明白为什么您的第一个代码段不能工作。您看到的默认操作是什么,您希望停止

    如果已将其他事件处理程序附加到该链接,则应查看和。请注意,
    return false
    相当于调用
    event.preventDefault
    event.stopPropagation()

  • 在第二个代码段中,
    e
    未定义。因此将在
    e.preventDefault()
    处引发错误,并且下一行永远不会执行。 换句话说

    $("div.subtab_left li.notebook a").click(function() {
        e.preventDefault();
        alert("asdasdad");
        return false;   
    });
    
    应该是

    //note the e declared in the function parameters now
    $("div.subtab_left li.notebook a").click(function(e) {
        e.preventDefault();
        alert("asdasdad");
        return false;   
    });
    
  • 这里显示了此代码确实有效,如果您只想停止以下链接,则实际上不需要返回false。

    尝试此代码:

       $("div.subtab_left li.notebook a").click(function(e) {
        e.preventDefault();
        return false;   
        });
    

    如果您已经使用submit操作进行了测试,那么您已经注意到它也不起作用

    原因是表单已在
    $(文档)中发布。读取(…

    所以,您只需将其更改为
    $(document).load(…

    现在,在你浏览者加载页面的那一刻,他将执行


    我也有同样的问题,我一直在测试很多不同的东西,但它就是不起作用。 然后我再次查看jQuery.com上的教程示例,发现:

    jQuery脚本需要在所引用的元素之后

    所以你的脚本需要在你想要访问的html代码之后

    否则jQuery似乎无法访问它。

    如果
    e.preventDefault();
    不起作用,则必须使用
    e.stopImmediatePropagation();

    有关更多信息,请参阅:


    不,没有错误。第一个代码执行
    alert()
    但不会阻止默认操作。第二个代码执行
    alert()
    但不会阻止默认操作。(唯一有效的是e.
    stopPropagation()+e.stopImmediatePropagation()
    同时使用这两种方法…为什么?这些方法阻止了事件的冒泡-您必须为这个点击事件设置一些其他处理程序,这些处理程序也会被触发并执行一些您不期望的操作。您当前的JavaScript在隔离状态下看起来很好。您可以发布代码的其他相关部分吗?或者更好的是,制作一个演示代码不起作用的脚本。我有一些jQuery选项卡…在这些选项卡中,我有一些
    ul li a
    来触发另一个事件..我将发布代码..我假设你是对的,因为这可能是唯一出错的事情-
    我在css中也有该元素的hover属性
    是的,你一直都是对的..我有
    $(“#tabs ul li a')。单击(function(){
    也适用于我的另一个
    。因此我对它进行了如下修改
    $(“#tabs ul#nav li a”)。单击(function(){
    现在它工作正常了…它是
    ul#nav
    缺失的:)很好,你找到了一个比我在更新中建议的更好的修复方法-通过使用更具体的选择器,你完全可以避免问题!@pufos好吧,问题是,它确实有效。这意味着你的页面或JavaScript中一定有其他错误。如果你发布更多,也许有人可以解决问题。是的,非常感谢..代码有问题..在
    $('#tabs ul li a')行。单击(function(){
    需要修改的是ul在我的代码中应用于多个
  • ul#nav
    。谢谢..大拇指起来了!从jQuery事件处理程序返回
    false
    与调用“preventDefault()”和“stop>的效果完全相同
    $("div.subtab_left li.notebook a").click(function(e) {
        e.stopImmediatePropagation();
        return false;
    });