2012-07-26 182 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; 
});