2014-01-17 20 views
2

在回答另一個問題時,我遇到了一些我認爲是非常奇怪的行爲,我想知道這是否應該被視爲一個錯誤,或者它是否在規範中。在點擊事件處理程序觸發之前,它是否會改變複選框的狀態?

此行爲可以在此jsFiddle處觀察到。

考慮下面的輸入框元素:

<input type="checkbox" id="check" /> 

如果要應用以下click事件處理(我們將使用jQuery這裏保持示例簡潔):

$('#check').on('click', function (e) { 
    console.log(this.checked); 
    return false; //This prevents the default action from occurring. 
}); 

你'd參見開發者控制檯:

true 

這裏實際發生的是ch在進入click事件處理程序之前,eckbox的狀態正在發生變化。但是,如果單擊事件處理程序阻止默認操作,則複選框的狀態爲還原爲

這對我來說似乎是一個錯誤。我希望複選框的狀態僅在點擊事件處理程序後更新,如果默認操作未被阻止。

這是一個錯誤?這是否應該向不同的瀏覽器分銷商報告?

+0

@ j08691我沒有在我的搜索中看到,謝謝。這些基本上是同義的問題,但我不同意在那裏接受的答案中表達的觀點。雖然我理解這裏正在進行的機制,並且可以想象一個可以以他們觀察到的方式實施的場景,但我不同意他們必須以這種方式實施。我覺得在處理完所有事件處理程序後,狀態會更直觀。即使使用交易系統,也只需交換交易中的評估順序。 – crush

回答

0

我不認爲這是一個錯誤(我只在Chrome目前測試這一點),但如果你仔細想想它的第二個它非常有意義,爲什麼控制檯的輸出True

在初始點擊複選框時,該值設置爲true。只有通過return false;語句打印到控制檯後,纔會設置爲false。所以無論你嘗試多少次,輸出總是會說True

+0

是的,這就是爲什麼我說國家正在恢復。我明白爲什麼它被恢復。機械師沒有問題。我覺得這個過程更有缺陷。在我看來,狀態的改變應該在處理完所有的點擊事件處理程序之後進行。 – crush

+0

@crush但爲什麼?默認複選框操作是在點擊時將該複選框設置爲true。因此,默認操作優先於您的點擊操作。這意味着默認操作發生,然後執行該對象的任何其他單擊事件處理程序。我知道你說你理解機制,所以如果你看看這個:http://jsfiddle.net/TTAUL/5/有一個嚴格的操作順序。 – Adjit

+0

你意識到我們正在談論'performDefaultAction(); if(!performDefaultAction)revertDefaultAction()'與'if(!performDefaultAction)return; performDefaultAction();'我說要麼是有道理的,但從用戶的角度來看,後者更直觀。 – crush

相關問題