Jquery.click阻止默认onClick

Jquery .click prevent default onClick

本文关键字:默认 onClick click Jquery      更新时间:2024-03-01

我在一个无序列表中有多个列表项。每个列表项如下所示:

<li class="something" onclick="function(somePHPparameter)">somePHPparameter</li>

如果这很重要的话,函数将通过ajax填充一个当前为空的div。我希望它在默认情况下,当页面第一次加载完成时,单击li将填充div。如果再次单击同一个li,它将清空div。如果单击另一个li代替,只需使用不同的"somePHPparameter"更改内容。我目前的实现是这样的:

$('.continent').click(function(){
    if ($(this).hasClass('select')){
        $("#box").empty();
        $('.continent').removeClass('select');
    }
    else{
        $('.continent').removeClass('select');
        $(this).addClass('select');
    }
});

第一,我的代码有任何错误的逻辑吗?有多余的吗?第二,实际的问题是,即使删除了类,填充div的onclick仍然存在。e.preventDefault()和e.stopPropagation()不起作用。有什么想法吗?

event.prventDefault()和event.stopPropagation()在这种情况下没有帮助,因为在触发点击时已经调用了两个不同的函数。一个函数称为内联函数,另一个函数使用jQuery调用。

为了避免这种情况,请从<li>中删除onclick属性,并在jquery点击处理程序中调用该函数。

如果是PHP生成的param,请将其作为rel属性添加到<li>中,并在jquery处理程序中使用,如下所示:

<li class="something" rel="somePHPparameter">somePHPparameter</li>

--

$('.continent').click(function(){
if ($(this).hasClass('select')){
    $("#box").empty();
    $('.continent').removeClass('select');
}
else{
    $('.continent').removeClass('select');
    $(this).addClass('select');
    var PHPparam = $(this).attr('rel');
    functionCallUsing(PHPparam);
}
return false;
});

只是个粗略的想法。

您可以简单地执行

$('.continent').click(function(){
    if ($(this).hasClass('select')){
        $("#box").empty();
        $('.continent').removeClass('select');
    }
    else{
        $('.continent').removeClass('select');
        $(this).addClass('select');
    }
    return false;
});