2012-06-29 168 views

回答

1

你不應該換用label元素input元素,試試這個:

<label for="average-data" class="section-view-time-checkbox"> 
    <span class="custom checkbox checked"></span> Average 
</label> 
<input type="checkbox" id="average-data" style="display: none;"> 

http://jsfiddle.net/zpZtH/7/

+0

剛擺脫它在一起。因爲我沒有提交表格,所以不需要它。只利用一些CSS樣式。 – Pwnna

+0

@ultimatebuster祝你好運:) – undefined

0

http://jsfiddle.net/Cc55g/

你需要你的點擊處理程序中調用event.preventDefault()。這可以防止在您的自定義函數運行後執行默認的點擊操作。第二次警報發生是因爲表單正在提交。

+0

爲什麼要提交表單?這只是一個'標籤'?另外,我不想做'event.preventDefault()'的原因是因爲我偶爾也會將鏈接嵌入到轉到另一個頁面的標籤中。 – Pwnna

+0

我真的不知道。輸入元素的默認點擊行爲顯然會改變元素的狀態,導致它以某種方式刷新。因爲你知道你想要做什麼並不重要,你可以避免其他行爲;我很好奇自己,但我會在這裏發帖,如果我遇到一個很好的解釋 – nbrooks

+0

你可以綁定一個不同的點擊監聽器到錨鏈接並調用該監聽器中的'event.stopPropagation()',以防止觸發點擊它的父元素。然後,它會執行其默認重定向/ changehash行動,沒有別的 – nbrooks

0

這是在Javascript中常見的錯誤。你可以在互聯網上找到很多專門針對SO的文章,因爲事件被激發了兩次。你可以嘗試這樣的事情

$(document).on('click', '#task-list li', function(e) 
{ 
     alert('Hellow world'); 
     e.stopPropagation(); 
     return false; 
}); 

而且它絕對的Javascript問題,因爲如果你打穀歌和搜索事件火災兩次你會看到,折角,jQuery和骨幹網等所有的地方開火事件兩次甚至三次。所以,它似乎是在這背後的JavaScript。當然,如果你使用Mozilla開發者網絡進行搜索,那麼你可以看到專家也這麼說。