Example on JS FIddle。爲什麼單選按鈕單擊事件的行爲不同
的問題是:
如果首次點擊是單選按鈕,就可以正常工作;但是,如果第一次點擊是跨文本(即aaaa),它不能得到檢查的收音機。
請告訴我爲什麼以及如何讓它變得一樣。
Example on JS FIddle。爲什麼單選按鈕單擊事件的行爲不同
的問題是:
如果首次點擊是單選按鈕,就可以正常工作;但是,如果第一次點擊是跨文本(即aaaa),它不能得到檢查的收音機。
請告訴我爲什麼以及如何讓它變得一樣。
此代碼,當點擊單選按鈕時恰好:
var obj = $(e.target||e.srcElement).parent();
score = obj.find('input:checked').val();
提出母體在obj
變量,它是將含DIV。這包含兩個單選按鈕。然後它會在該DIV中找到FIRST檢查的輸入元素,它在檢查後始終是具有「第一個」值的元素。
你應該只得到它被點擊了該項目的價值:
score = $(e.target||e.srcElement).val();
這可以被改寫爲
score = $(this).val();
這裏有一個工作示例:http://jsfiddle.net/RPSwD/10/
不知道爲什麼這已經downvoted或者不同 – billyonecan
你的回答不工作。但是可以告訴我爲什麼當我們點擊跨度文字,「obj.find(‘輸入:檢查’)」無法找到正確的檢查收音機,而當我們在電臺直接點擊,它並找到正確的檢查收音機。謝謝。 – yejinxin
單擊span文本時,jQuery在實際檢查它之前調用.click函數。當你直接點擊單選按鈕時,單擊它的動作會檢查它,然後.click功能被觸發。我不確定這是爲什麼,但這是jQuery如何做到的。單選按鈕';當你點擊跨度,如果要觸發功能,您可以使用此代碼'.attr的。點擊功能之前編程方式檢查的單選按鈕(「檢查」,「檢查」)。 – Timm
見新fiddle。
的問題是這一行:
score = obj.find('input:checked').val();
將其更改爲:
score = $(this).val();
這樣做的原因是,你正在尋找在div所選擇的項目,但是,從第一次點擊該項目尚未被選中。鑑於該事件針對的是單選按鈕,您可以假設無線電是選定的。請注意,您不需要使用e.target||e.srcElement
。 jQuery爲你處理這件事。改爲使用$(this)
。
此外,您需要在單選按鈕上設置一個名稱,以阻止它們被選中。或者,如果兩者都選擇了所需的行爲,請改用複選框。
你不需要使用任何event
物業:
var score = $(this).val(); // in your '.x' click handler
$('.y').click(function(e) {
$(this).prev('.x').click();
});
爲什麼downvote? – billyonecan
@deifwud。你沒有解釋爲什麼/你的代碼如何解決這個問題。 –
請在您的問題中加入相關代碼! – ThiefMaster
好了,問題應該是如下:鑑於第一無線電被選中,爲什麼點擊跨度文本「BBBB」的行爲不是直接點擊第二個單選輸入 – yejinxin