2013-03-20 58 views
0

的8 GET價值我一直在谷歌上搜索約2小時,以解決以下問題(包括其他問題#1):Internet Explorer的單選框

<script type="text/javascript"> 
    jQuery(document).ready(function() { 
     jQuery('input[type="radio"]').unbind('click.preset') 
     .bind('click.preset', function() { 
      doingStuffWith(jQuery(this).val()); 
     }); 
    }); 
</script> 

<input type="radio" name="lightType" value="led" /> 
<input type="radio" name="lightType" value="tube" /> 

正如你所看到的,我只是想找回單選按鈕組「lightType」的當前值與它一起工作。這在Firefox/Safari/Chrome中很有魅力,但IE8只是返回一個空字符串而讓我很難過。

我已經嘗試了幾個黑客從其他問題,如綁定更改事件的單選按鈕,並迫使IE8通過模糊單擊單選按鈕來啓動它。也許我是 剛剛患上了失明現在。

我正在使用最新的jQuery版本,並且確保沒有其他綁定事件會受到干擾。但有趣的是,檢索值前添加一個警報()和IE返回當前值:

.... 
// DOES WORK 
alert(); 
alert(jQuery(this).val()); // alerts e.g. "tube" 

// DOESN'T WORK 
alert(jQuery(this).val()); // alerts "" 

我認爲這可能是一個時間的問題,而是試圖耽誤我用的setTimeout一個警報調用沒有幫助。

在此先感謝大家,我希望我只是盲目,並沒有在IE8中發現另一個醜陋的行爲。

+0

幫助我學習爲什麼不乾脆:'的jQuery(「輸入[類型=」電臺「)')。on('change',function(){ doingStuffWith(jQuery(this).val()); });' – 2013-03-20 23:27:24

+0

當控件失去焦點**時,IE中的更改偵聽器觸發**,這是根據W3C規範,但不直觀,而不是其他瀏覽器如何實現它(他們有效地使用它作爲一個單擊複選框和單選按鈕的偵聽器)。因此,通常在這些元素上使用點擊偵聽器。 – RobG 2013-03-21 00:05:07

回答

0

謝謝你的回答,但沒有人工作。我不確定這是否是jQuery中的錯誤,或者只是我在特定情況下遇到的問題。看起來jQuery強制IE8在字段真正改變之前觸發更改事件。

我終於解決它通過結合模糊事件,並將其與powtacs結合:檢查的解決方案是這樣的:

<script type="text/javascript"> 
jQuery(document).ready(function() { 

    jQuery('input[type="radio"]').unbind('click.preset') 
    .bind('click.preset', function() { 
     jQuery(this).blur(); 
    } 

    jQuery('input[type="radio"]').unbind('blur.preset') 
    .bind('blur.preset', function() { 
     doingStuffWith(jQuery('input[type="radio"]:checked').val()); 
    }); 
}); 
</script> 
0

我會使用最新的jQuery和on():checked選擇在回調:

jQuery(document).ready(function() { 
    jQuery('input[type="radio"]').on(function('change blur mousedown click') { 
     alert(jQuery('input[type="radio"]:checked').val()); 
    }); 
}); 

其實這是一個有點棘手,你不能在回調「這個」獲取選定的單選按鈕你必須使用其他選擇器: How can I know which radio button is selected via jQuery?

+0

我可能是錯的,但我相信如果您包含更改並單擊「on」,它會在某些瀏覽器上啓動兩次。 – 2013-03-21 12:20:22

0

IE8的一個公平的選項,創建一個類每一個無線選項(!)並用它來選擇選中的選項。語義是有點怪異,但它完美地工作對我說:

HTML

<input type="radio" name="example" class="example_class" value="1"/>#1 
<input type="radio" name="example" class="example_class" value="2"/>#2 
<input type="radio" name="example" class="example_class" value="3"/>#3 

JS

var exampleValue = $('.example_class:checked').val();