2012-02-01 2 views
0

値をドロップダウンリストから選択したかどうかに基づいてボタンを有効/無効にしようとしています。何らかの理由でJavaScriptが選択されたインデックスを取得しません。ドロップダウンリスト私はのonChange属性追加している後ろのコードでJavaScriptのdropdownlist.selectedIndexがASP.netページでエラーを起こしている

<asp:DropDownList ID="ddlMyDropDownList" runat="server"> 
    <asp:ListItem> </asp:ListItem> 
    <asp:ListItem>Yes</asp:ListItem> 
    <asp:ListItem>No</asp:ListItem> 
</asp:DropDownList> 

:ここでは、ドロップダウンリストの宣言だ

ddlMyDropDownList.Attributes.Add("onchange", "enableButton();") 

はこれがenableButton機能が一部にまで剥奪、次のようになります

function enableButton() { 
    var ddl = document.getElementById('#<%= ddlMyDropDownList.ClientID %>'); 
    alert("Testing"); 
    var idx = ddl.selectedIndex; 
}; 

このように、ドロップダウンリストの値を変更すると警告が表示されます。私はIDX行の後にアラートを移動した場合、しかし:

function enableButton() { 
    var ddl = document.getElementById('#<%= ddlMyDropDownList.ClientID %>'); 
    var idx = ddl.selectedIndex; 
    alert("Testing"); 
}; 

それはddl.selectedIndexは何とかエラーの原因となっていることを示し、発生しません。なぜこれが起こっているのでしょうか、どのように解決しますか?ユーザーが最初のオプション以外のものを選択した場合にのみテストしたいと思うとすれば、これを行う方が簡単ですか?

+1

あなたはddlのコントロールへの参照を取得していますか? var ddlがnullまたは未定義の場合、アラートは引き続き発生します。おそらく、ブレークポイントからコードにステップインしたり、別のプロパティを調べてみたりできます。 – DOK

+0

ddlに警告すると、何が返されますか? –

答えて

2

alert(ddl)の場合、IDが#<%= ddlMyDropDownList.ClientID %>の要素がないため、おそらくがnullであることがわかります。 id文字列の先頭から#を削除してみてください。

+0

ハッシュの良い点。 nullを返すのではなく、私はそれが未定義になると思います。 –

+0

@JamieDixonはい私はあなたが正しいと思う、ありがとう。 –

+0

実際には、alert(ddl)は少なくともFireFoxでは「null」と表示されていました。キャッチをありがとう。それらは私があまりにも簡単に見逃す誤りの種類です。 –

0

あなたのJS-機能のうち投げ、それを:

<script type="text/javascript"> 
    var ddlMyDropDownList = '<%= ddlMyDropDownList.ClientID %>'; 

    function enableButton() { 
    var ddl = document.getElementById(ddlMyDropDownList); 
    } 
</script> 

か - より良い可能性 - 直接参照を渡す:

ddlMyDropDownList.Attributes.Add("onchange", "enableButton(this);") 

その後、あなたは要素を検索する必要はありません。

function enableButton(ddl) { 
    var idx = ddl.selectedIndex; 
}