2012-09-25 51 views
0

頁面代碼如下:JQuery的 - 不能正確得到檢查收音機的單擊事件

<input type="radio" class="direct" name="r1" value="first" /> 
    <span class="proxy">radio1</span> 
<input type="radio" class="direct" name="r1" value="second" /> 
    <span class="proxy">radio2</span> 

js代碼如下:

$('.direct').click(function(e) { 
    var obj = $(this).parent(), 
     value = obj.find('input:checked').val(); 
    if(value){ 
     alert('you click ' + value + ' button'); 
    }else{ 
     alert('you did not click a button'); 
    } 
}); 
$('.proxy').click(function(e) { 
    $(this).prev().click(); 
});​ 

這裏是example on JSFiddle

我的問題是: 爲什麼點擊span文本不能像直接單擊單選按鈕那樣工作。

+1

您不能使用'label'元素嗎? –

+1

我不清楚你想達到什麼目的。當我點擊相應的跨度時,我看到收音機被「檢查」了! – HungryCoder

回答

2

正如我剛纔所說,問題是不明確的,至少對我來說。但是,如果您想在下一個跨度上點擊時檢查收音機,您可以這樣做:

$('.proxy').click(function(e) { 
    $(this).prev().attr('checked', true) 
});​ 
+0

這會將上一個輸入的屬性設置爲已選中。在用戶的問題中,點擊事件被觸發並且不設置先前輸入的屬性,因此他的編碼不起作用。 – williamcarswell

+0

謝謝。最後,我使用$'('。proxy')。click(function(e){(this).prev()。attr('checked',true); $(this)。 prev()。click(); });' – yejinxin

+0

@williamcarswell是的,這就是我的意思。你能告訴我爲什麼會發生這種情況 – yejinxin

2

如果使用for屬性設置爲正確輸入的標籤,則可以避免所有此問題。

<input type="radio" class="direct" name="r1" id="r11" value="first"/> 
<label class="proxy" for="r11">radio1</label> 
<input type="radio" class="direct" name="r1" id="r12" value="second"/> 
<label class="proxy" for="r12">radio1</label>​​​​​​​​​ 

DEMO

+0

這是真的!但似乎他想用jQuery來完成它!我想知道爲什麼! (至少在這種情況下) – HungryCoder

+0

@HungryCoder好吧,這是因爲我在維護他人的代碼。如果我將其更改爲標籤方式,則必須更改很多代碼... – yejinxin