Почему я получаю эту ошибку «ноль или нет объекта» в IE? - PullRequest
2 голосов
/ 16 декабря 2010

У меня есть кнопка (<asp:button id="MyButton" runat="server" />). Я хочу, чтобы эта кнопка автоматически нажималась при загрузке. Поэтому я добавил JavaScript для этого:

<script language="javascript" type="text/javascript">
      var myButton = document.getElementById('myButton');
      myButton.click();
</script> 

Я получаю сообщение об ошибке «Ошибка времени выполнения Microsoft JScript:« myButton »является нулем или не является объектом»

Страница, на которой находится эта кнопка, имеет MasterPage сзади. Будет ли это причиной того, что это происходит?

Ответы [ 7 ]

2 голосов
/ 16 декабря 2010

Вы хотите написать идентификатор клиента, а не идентификатор сервера.

<script language="javascript" type="text/javascript">
      var myButton = document.getElementById('<%=MyButton.ClientID%>');
      myButton.click();
</script> 

Я вижу, этот код будет запущен до того, как кнопка будет загружена на клиент, поэтому вам нужно будет поместить этот блок скрипта после кнопки, или, если вы используете jQuery или что-то подобное, они предложат готовые к работе документы. Следующий код будет запущен после полной загрузки документа.

$(document).ready(function () {
    var myButton = $('#<%=MyButton.ClientID%>');
    myButton.click();
});

Вы захотите установить несколько свойств для реализации ваших требований.

<asp:button 
    id="MyButton" 
    runat="server" 
    UseSubmitBehavior="false" 
    OnClientClick="return changeBackgroundColor();" />

Установка UseSubmitBehavior на false означает, что кнопка не будет отправлять сообщения обратно на сервер. Свойство OnClientClick буквально, как и звучит. При нажатии клиент выполнит указанный код JavaScript.

2 голосов
/ 16 декабря 2010

document.getElementById() чувствительно к регистру. Попробуйте document.getElemenById('MyButton').

0 голосов
/ 16 декабря 2010

Возможно, страница загружена не полностью, поэтому при выполнении этого кода myButton может быть недоступен.Вы можете создать функцию, которая вызывает это при загрузке тела:

<body onload="functionForButton()">

или поместить скрипт в конец тега body:

<script language="javascript" type="text/javascript">
      var myButton = document.getElementById('myButton');
      myButton.click();
</script> 
</body>

Также убедитесь, что регистртак же.MyButton! = MyButton

0 голосов
/ 16 декабря 2010

Измените свой сценарий на:

<script language="javascript" type="text/javascript">
    var myButton = document.getElementById('<%= myButton.ClientID %>');
    myButton.click();
</script>

И поместите этот сценарий в конец страницы непосредственно перед </body>.

0 голосов
/ 16 декабря 2010

Измените id = "MyButton" на id = "myButton". Дело в javascript / DOM

0 голосов
/ 16 декабря 2010

Кнопка, вероятно, имеет другой идентификатор, когда она отображается клиенту. Попробуйте установить ClientIDMode="Static" для кнопки. Тогда идентификатор будет таким же, как на стороне сервера.

0 голосов
/ 16 декабря 2010

Какой идентификатор кнопки в отображаемом HTML на стороне клиента?ASP .NET имеет тенденцию иметь более длинные автоматически генерируемые идентификаторы на стороне клиента для собственного использования.Одна вещь, которую вы могли бы сделать, это установить атрибут name кнопки и сослаться на него в JavaScript.

Также вам может пригодиться метод поиска идентификатора клиента .NET с использованием jQuery .

...