2013-09-09 4 views
6

У меня есть следующие JScript на странице

<script type="text/javascript"> 
    function ProcessButtonDisable() { 
     var button = $find("<%=ProcessButton.ClientID %>"); 
     button.disabled = true; 
      } 
</script> 

, а затем

<asp:Button ID="ProcessButton" Text="Process All" runat="server" OnClick="Process_Click" OnClientClick="ProcessButtonDisable()" /> 

при запуске страницы и стреляя кнопку я получаю

Microsoft JScript ошибка времени выполнения : Невозможно установить значение свойства «disabled»: объект имеет значение null или undefined

и динамическая страница преобразовал его:

<script type="text/javascript"> 
    function ProcessButtonDisable() { 
     var button = $find("ctl00_ctl00_BodyContentPlaceHolder_MainContentPlaceHolder_ProcessButton"); 
     button.disabled = true; 
    } 
</script> 

<input type="submit" name="ctl00$ctl00$BodyContentPlaceHolder$MainContentPlaceHolder$ProcessButton" value="Process All" onclick="ProcessButtonDisable();" id="ctl00_ctl00_BodyContentPlaceHolder_MainContentPlaceHolder_ProcessButton" /> 

в качестве элемента управления четко определены и идентификатор клиента, кажется, возвращает правильный идентификатор я не знаю, что случилось

Любая помощь?

пса в случае, если это не ясно из кода цель это предотвратить он пользователь, нажав на и повторно отправить запрос, прежде чем страница имеет время для перезагрузки после первого клика

+0

попробовать '$ .find()' (ум точку) или '$ (документ) .find()' –

+0

Теперь кнопка имеет значение [], и хотя оно не является ошибкой, оно не отключает кнопку – MikeT

+0

, также возвращает массив ... $. find() [0] даст вам кнопку –

ответ

-4

Вы должны использовать точка обозначения как find() функция JQuery, как это:

<script type="text/javascript"> 
    function ProcessButtonDisable() { 
     var button = $.find("<%=ProcessButton.ClientID %>"); 
     button.disabled = true; 
    } 
</script> 

Кроме того, если вы собираетесь взять на себя труд, чтобы искать элемент DOM в вашей логике JQuery, то не беспокойтесь разводкой OnClientClick на сервере; либо провод до щелчка события с помощью JQuery или передать сам элемент функции JavaScript:

Использование JQuery телеграфировать событие щелчка (рекомендуется):

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#<%=ProcessButton.ClientID%>").click(function() { 
      $(this).disabled = true; 
     }); 
    }); 
</script> 

Использование атрибута OnClientClick телеграфировать щелчок событие и передать элемент (не рекомендуется):

<asp:Button ID="ProcessButton" Text="Process All" runat="server" OnClick="Process_Click" 
    OnClientClick="ProcessButtonDisable(this)" /> 

<script type="text/javascript"> 
    function ProcessButtonDisable(elem) { 
     elem.disabled = true; 
    } 
</script> 
+0

последний отлично работает, почему это не рекомендуется? – MikeT

+1

Не рекомендуется, поскольку он необязательно связывает JavaScript с элементом DOM в самой разметке. Это загромождает разметку, особенно если у вас несколько кнопок, которые обрабатываются одним и тем же кодом обработчика событий. Если с ненавязчивым JavaScript вы можете сделать селектор, который применяет один и тот же обработчик кликов к нескольким различным кнопкам, которые имеют один и тот же признак (т. Е. Являющийся кнопкой или имеющий тот же атрибут 'class'). Это делает логику JavaScript отдельно от фактической разметки, и вам не нужно иметь один и тот же вызов функции в нескольких тегах кнопок. –

+0

Это просто не рекомендуется, но не думайте, что вы не можете этого сделать, потому что это сработает. Существует большой толчок, чтобы элементы JavaScript и HTML были отделены друг от друга, но при этом возникает неудобство при просмотре двух файлов или разделов файлов независимо при отладке кода или ухудшении отладки чужого кода. Вероятно, я не должен был помещать комментарии «рекомендуется» и «не рекомендуется» в мой ответ. Приносим извинения, но рад, что это сработало для вас. :-) –

-1

попробовать это:

<script type="text/javascript"> 
    function ProcessButtonDisable() { 
     var button = $("#<%=ProcessButton.ClientID %>"); 
     button.disabled = true; 
    } 
</script> 

[править] или

<script type="text/javascript"> 
    function ProcessButtonDisable() { 
     $("#<%=ProcessButton.ClientID %>").attr("disabled", "disabled"); 
    } 
</script> 
+0

возвращает ошибку времени выполнения Microsoft JScript: невозможно получить значение свойства attr: объект имеет значение null или undefined – MikeT

0

Вы должны выбрать то, что вы «находка» в первом. Например, если вы выбираете документ, то используйте метод «find», который должен иметь нужный результат.

<script type="text/javascript"> 
    function ProcessButtonDisable() { 
     var button = $(document).find(("<%=ProcessButton.ClientID %>"); 
     button.disabled = true; 
     } 
</script> 
-1

disabled не свойство объекта JQuery это свойство элемента DOM. Попробуйте использовать либо:

$('selector').get(0).disabled = true 

или

$('selector').attr('disabled','disabled'); 
+0

Не слишком важно, как если бы объект null, вы не можете изменить attr либо – MikeT

+0

NREs от попыток доступа к свойствам из недействительных неявных параметров (в этом случае null). Но, как вы узнали из ответа @ [Karl Anderson], вы пытались получить доступ к свойству DOM из объекта компонента библиотеки Microsoft AJAX в результате вызова [$ find shortcut] (http://msdn.microsoft.com/ ан-нас/библиотека/bb397522.aspx). Первые два ответа Карла все еще не сработали для вас, потому что он тоже пытался получить доступ к свойству DOM из объекта, отличного от DOM (jQuery). – theoski

12

-1 для всех предыдущих ответов на предположении JQuery. $find is a function, определенные библиотекой Microsoft AJAX. Он «предоставляет ярлык для метода findComponent класса Sys.Application», который получает «ссылку на объект Component, который был зарегистрирован в приложении с помощью метода addComponent».Вместо этого попробуйте использовать $get(), который «Предоставляет ярлык методу getElementById класса Sys.UI.DomElement».

Эта страница исследует обе функции в деталях: The Ever-Useful $get and $find ASP.NET AJAX Shortcut Functions

+0

Могу ли я считать, что поданные голоса являются ответными? Я не ошибаюсь. – xr280xr

+2

кажется довольно мелким, чтобы ответить на все ответы elses, потому что они затушевывали точку сложности. нисходящие голоса за то, когда предоставленный ответ абсолютно бесполезен и не прав, так как ваш ответ в основном жалуется на неправильную терминологию, почти не пытаясь ответить на ваш первоначальный вопрос, как заслуживающий голосования, так как все ответы на ваш голос проголосовали, так что я могу понять, если они ответны – MikeT

+2

@MikeT Это совсем не мелочь. Это цель функции пониженного голосования.Они отвечают на предполагаемый вопрос, а не на вопрос, который был задан. Терминология не имеет к этому никакого отношения. $ Find - из полностью несвязанной библиотеки javascript; библиотеку MS AJAX JS, а не JQuery. В моем ответе есть 1 короткое предложение, описывающее мое пониженное голосование и почему другие ответы неверны (что составляет 10% от моего ответа, а не «самого»). Очевидно, это было слишком мало, если что-нибудь, потому что вы, очевидно, не нашли времени, чтобы понять вопрос или ответы. – xr280xr

3

$Find это отличается от $.find. Первый представляет собой ярлык для метода findComponent класса Sys.Application, который определяется библиотекой Microsoft AJAX. а второй - метод API из jQuery, который получает потомки каждого элемента в текущем наборе согласованных элементов, фильтруется селектором, объектом jQuery или элементом.

Таким образом, $Find должен найти компонент не html DOM. и должна быть определена библиотека ajax.

Для получения дополнительной информации:

http://msdn.microsoft.com/en-us/library/vstudio/bb397441(v=vs.100).aspx

http://api.jquery.com/find/

+0

Ясность важна в программировании, вы хотите быть пишут '$ Find' или' $ find'? – Nol