Я использую ASP.NET 3.5 в сочетании с ужасными UpdatePanel , jQuery.delegate()
и JavaScript литералами объектов.
Я использую jQuery.delegate()
для сохранения обработчиков событий, которые запускаются после PostBack , как и ожидалось.
Проблема связана с объектами jQuery , хранящимися в свойствах литералов объектов в init()
, где они сохраняют значения, которые были до ASP.NET PostBack .
Вот мой JavaScript :
SFAIC
SFAIC =
{
masterPages: { cs: "CS_", cp: "CP_" },
contentPages: { cs: "CSContent_", cp: "CPContent_" },
isSecurePage : false,
$body : undefined,
$container : undefined,
$updatePanel : undefined,
$textBox : undefined,
$errorLabel : undefined
};
SFAIC.init ()
SFAIC.init = function ()
{
log( "--> SFAIC.init() fired" );
var self = this;
self.$body = $( "body" );
self.$container = self.$body.find( "#container" );
self.$updatePanel = self.getCSMasterElement( "UpdatePanel1", self.$container );
self.$textBox = self.getContentElement( "TextBox1" );
self.$errorLabel = self.getContentElement( "ErrorLabel1" );
self.$updatePanel.delegate( self.$textBox.selector, "blur", function ()
{
self.validateRequired( self.$textBox, self.$errorLabel );
});
self.$textBox.focus();
};
SFAIC.validateRequired ()
SFAIC.validateRequired = function ( $element, $errorLabel )
{
if ( $element.val().length === 0 ) { $errorLabel.text( "Required" ); }
else { $errorLabel.text( "" ); }
};
Учитывая вышеизложенное, когда запускается SFAIC.init()
, self.textBox
назначается его объекту jQuery. Я предполагаю, что в этом заключается мое замешательство. Я думал, что когда вы вызываете .val()
, он сразу вернет значение того, что находится в этом элементе. В случае, когда вы делаете вызов серверу и изменяете значение элемента управления, который затем возвращается, отображая измененное значение элемента, кажется, что объект jQuery не знает об этом изменении?
Я здесь не прав?
Что мне нужно сделать, чтобы сохранить в реальном времени ссылку на элемент, чтобы я мог получить текущее значение после публикации страницы?
Запрос на редактирование за @ DaveLong :
SFAIC.getCSMasterElement ()
SFAIC.getCSMasterElement = function ( id, $context )
{
return SFAIC.getElement( SFAIC.masterPages.cs, id, $context );
};
SFAIC.getCPMasterElement ()
SFAIC.getCPMasterElement = function ( id, $context )
{
return SFAIC.getElement( SFAIC.masterPages.cp, id, $context );
};
SFAIC.getContentElement ()
SFAIC.getContentElement = function ( id, $context )
{
return SFAIC.getElement
(
( SFAIC.isSecurePage ) ? SFAIC.contentPages.cp : SFAIC.contentPages.cs,
id,
$context
);
};
SFAIC.getElement ()
SFAIC.getElement = function ( page, id, $context )
{
selector = SFAIC.getElementIdSelector( page, id );
return ( selector )
? ( $context && $context.length )
? $context.find( selector )
: SFAIC.$body.find( selector )
: undefined;
};
SFAIC.getElementIdSelector ()
SFAIC.getElementIdSelector = function ( page, id )
{
var prefix = SFAIC.getElementPrefix( page );
return ( prefix && id ) ? "#" + prefix + id : undefined;
};
SFAIC.getElementPrefix ()
SFAIC.getElementPrefix = function ( page )
{
switch ( page )
{
case SFAIC.masterPages.cs : return SFAIC.masterPages.cs;
case SFAIC.masterPages.cp : return SFAIC.masterPages.cp + SFAIC.masterPages.cs;
case SFAIC.contentPages.cs : return SFAIC.masterPages.cs + SFAIC.contentPages.cs;
case SFAIC.contentPages.cp : return SFAIC.masterPages.cp + SFAIC.masterPages.cs + SFAIC.contentPages.cs + SFAIC.contentPages.cp;
}
};