2012-07-26 126 views
0

我有一个无序列表中有多个列表项目。每个列表项目如下所示:Jquery .click防止默认onClick

<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()不起作用。有任何想法吗?

回答

1

event.preventDefault()和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; 
}); 

只是一个粗略的想法。

+0

这工作很好。虽然返回虚假并不是必要的。 – 2012-07-27 02:15:56

0

你可以简单地做

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

    return false; 
});