Javascript и asp.net веб-элементы управления

У меня есть веб-пользовательский элемент управления, который генерирует следующий HTML-код на клиенте.

Я хочу сослаться на конкретный элемент управления RadioButton, используя JavaScript.

Я не уверен, как это сделать, так как идентификатор RadioButton генерируется asp.net.

Например я даю идентификатор RadioButton = 1_RadioButton

asp.net генерирует ID = ctl00_ContentPlaceHolder1_Material_1_RadioButton

как этот код JavaScript может найти элементы управления Radio Button?

    <script type="text/javascript">
        $(document).ready(function() {
            if (document.getElementById("1_RadioButton").checked) {
                $("#1_other").hide();
            }
        });    
    </script>

Вот что генерирует asp.net для клиента.

    <input id="ctl00_ContentPlaceHolder1_Material_1_RadioButton" type="radio" name="ctl00$ContentPlaceHolder1$Material$Academic" value="1_RadioButton" onclick="javascript:$('#1_other').show('fast');" />

    <label for="ctl00_ContentPlaceHolder1_Material_1_RadioButton">Yes</label>

    <input id="ctl00_ContentPlaceHolder1_Material_2_RadioButton" type="radio" name="ctl00$ContentPlaceHolder1$Material$Academic" value="2_RadioButton" checked="checked" onclick="javascript:$('#1_other').hide('fast');" />

    <label for="ctl00_ContentPlaceHolder1_Material_2_RadioButton">No</label>

    <input id="ctl00_ContentPlaceHolder1_Material_3_RadioButton" type="radio" name="ctl00$ContentPlaceHolder1$Material$Academic" value="3_RadioButton" onclick="javascript:$('#1_other').hide('fast');" />

    <label for="ctl00_ContentPlaceHolder1_Material_3_RadioButton">Uncertain</label>

    <div id='1_other'>
         <input name="ctl00$ContentPlaceHolder1$Material$4_TextBox" type="text" value="bbb chabng" id="ctl00_ContentPlaceHolder1_Material_4_TextBox" />
   </div>

4 ответа

Решение

Если этот код находится в файле.aspx, используйте вместо него <% = MyRadioButton.ClientID%>, и механизм рендеринга ASP.NET правильно предоставит вам идентификатор.

Обновление: например:

<script type="text/javascript">
    $(document).ready(function() {
        if ($get("<%= MyRadioButton.ClientID %>").checked) {
            $("#1_other").hide();
        }
    });    
</script>
var radioButton = document.getElementById("<%= 1_RadioButton.ClientID %>");

А потом иди оттуда. Примечание - я не уверен в кавычках.

Очень просто установить clientidmode веб-контроль в статический (clientidmode="static") и вы можете быть уверены, что asp.net будет держать ваш ID как видно в интерфейсе дизайнера.

Я написал сообщение в блоге о том, как это сделать:

Допустим, у вас есть элемент управления ярлыком на вашей странице:

Сгенерированный вывод html и идентификатор этого элемента управления может выглядеть следующим образом:

<span id="ctl00_ContentPlaceHolder1_Label1"></span>

К сожалению, сгенерированный идентификатор ct100_ContentPlaceHolder1_Label1 не всегда будет одинаковым от сборки к сборке. Итак, пытаясь выбрать его так:

$("#ct100_ContentPlaceHolder1_Label1").hide();

в конце концов сломается и не скроет элемент управления меткой.

Хитрость заключается в том, чтобы использовать ASP.NET внутри селектора jQuery. Label1.ClientID будет возвращать сгенерированный идентификатор каждый раз. Мы объединяем ASP.NET и jQuery в одну строку следующим образом:

$("#<%= Label1.ClientID %>").hide();

Это будет получать сгенерированный идентификатор элемента управления Label каждый раз.

Другие вопросы по тегам