0

シンプルな YES/NO ラジオ ボタンを追加した Webforms ページを使用しています。ラジオ ボタンをクエリする JavaScript 関数を作成しました。Chrome では問題なく動作しますが、IE8 (企業の標準ブラウザ) では失敗します。IE8で実行しているときにどのボタンがクリックされたかを確認する方法を考え出そうとしています。これは HTML ページのボタンです。

<td width="35%">
    <label class="label_bold floatLeft" style="margin-top: .25em">Clinicals sent:</label>
 </td>
<td width="15%">       
    <asp:RadioButtonList ID="rbtClinicalsSent" 
                         AutoPostBack="true" 
                         RepeatLayout="Flow" 
                         RepeatDirection="Horizontal"
                         OnClick="rbtClinicalsSent_clicked()"
                         OnTextChanged="rbtClinicalsSent_TextChanged" 
                         runat="server">
        <asp:ListItem Value="1">Yes</asp:ListItem>
        <asp:ListItem Value="0">No</asp:ListItem>
    </asp:RadioButtonList>
</td>

私の JavaScript 関数 (StackOverflow の別の場所からコピーしたもの) は、Chrome で正常に動作します (Firefox は試していません)。

function rbtClinicalsSent_clicked() {
    /* This is based on the assumption that the first element
       in the radio button is Yes */
    var yesButtonClicked = false;
    var radioButton;
    radioButton = document.getElementsByName("rbtClinicalsSent");
    for (i= 0; i< radioButton.length; i++){ 
        if (radioButton[i].checked & rbtIdx===0) 
            yesButtonClicked = true;
    };
    return yesButtonClicked;
};

IE8 でデバッガーを実行し、"rbtClinicalsSent" ラジオ ボタンで使用できるメソッドを確認すると、"クリックされた" 状態のチェックを許可するものがないかのように見えます。理想的な解決策は、IE8 をダンプすることだと思いますが、これはこの企業環境では不可能です。

ティア・スコット

4

1 に答える 1

0

私は答えを見つけました。IE8では、radioButton[0]にいくつかのメタ データが含まれていますが、checked プロパティは含まれていません。おそらく多少有用なプロパティは innerText です。これは、「はい」と「いいえ」の 2 つのラジオ ボタンの場合、innerText は「YesNo」です。修正は、"typeof(RadioButton[i])==="undefined" をチェックすることでした。以下は、IE8、Chrome、および Firefox で機能する同じ関数です。

function rbtClinicalsSentYes_clicked() {
/* This is based on the assumption that the first element
   in the radio button is Yes */
var yesButtonClicked = false;
var radioButton;
radioButton = document.getElementsByName("rbtClinicalsSent");
for (i= 0; i< radioButton.length; i++){ 
    if (typeof(radioButton[i].checked) === "undefined") {
        continue;
    }
    if (radioButton[i].checked & rbtIdx===0) 
        yesButtonClicked = true;
};
return yesButtonClicked;

};

于 2013-10-05T05:03:25.287 に答える