2010-05-17 7 views
1

У меня есть asp: TextBox с asp: RegularExpressionValidator, чтобы проверить, является ли это числом. Очевидно, событие onchange будет привязано к этому текстовому полю при рендеринге. Также я добавляю событие изменения в $ (document) .ready, чтобы сделать некоторые вычисления, когда значение изменено.Запустить событие изменения текстового поля в jQuery

<asp:TextBox id="myText" runat="server" /> 
<asp:regularexpressionvalidator id="myRev" ControlToValidate="myText" runat="server">*</asp:regularexpressionvalidator> 

$(document).ready(function(){ 
    $('[id$=myText]').bind('change',function(){ 
      //do something 
    }).change();  //force the change event at the very beginning 
}); 

Моя функция будет выполнена позже, чем .net, генерируемые js из-за времени регистрации. Но asp.net js выдает ошибку. Я проследил в ЯШАХ:

function ValidatorOnChange(event) { 
     ... 
    } 

и обнаружил, что все event.fromElement, event.toElement, event.srcElement равны нуль, который вызывает исключение. Я сделал что-то не так? Любые решения? Благодарю.

EDIT

Это оказалось MS ошибка, работает нормально в ASP.NET 4 VS2010.

+0

Вам нужен обработчик .net для запуска или только jQuery? –

+0

@Nick Craver: $ (XXX) .change() вызовет все события изменения. Но почему сгенерированная js дает ошибку? Я думаю, что его нужно уволить правильно. –

+0

Вместо '$ ('[id $ = myText]')' use '$ ('# myText')' – Pointy

ответ

4

Включая точку заостренной в (я треснуть себя вверх) о ID, вы можете переписать так:

$(function(){ 
    $('#<%=myText.ClientID%>').change(function() { 
    //stuff 
    }).triggerHandler('change'); 
}); 

не видя, как именно прилагается ваше другое событие, .triggerHandler() бы мое лучшее предложение, так как это событие не пузыриться для захвата с помощью обработчика .Net.

+0

Не работает, я думаю, triggerHandler() аналогичен trigger() в этом выпуске. Событие изменения, генерируемое .net, будет запущено в обоих из них. triggerHandler() не будет вызывать события браузера, но .net js не является событием браузера. –

+0

lol 12 more to go – Anurag

+0

@ Danny - Поскольку он привязан непосредственно к элементу, вы захотите использовать этот подход для запуска события изменения: http://stackoverflow.com/questions/168596/programmatically-triggering-events -in-javascript-for-ie-using-jquery –

0

Собирайте свои вычисления в функции и вызвать его на готовом случае вместо запуска изменения:

$(document).ready(function(){ 
    $('[id$=myText]').bind('change',function(){ 
      doCalc(); // or doCalc(this) or whatever you need 
    }); 
    doCalc(); 
}); 
+0

Не зная внутри этого метода длинный снимок, и это можно сделать * много * короче: '$ ('[id $ = myText]'). Change (doCalc);' –

+0

Да, действительная точка, обычно я сделайте это более коротким стилем, сосредоточив внимание на главном моменте, чтобы сделать его более заметным. – andr

+0

Интересно, почему событие запущено неправильно. Я использую правильную грамматику. –

Смежные вопросы