2010-01-29 3 views
0

Я честно пробовал несколько разных путей от Google на этом эрро, но я ударился головой о кирпичную стену.Ошибка выполнения Microsoft JScript: ожидаемый объект

У меня есть этот бит JQuery в моем коде позади:

tbxProdAC.Attributes.Add("onclick", "$('radProdAC.ClientID').attr('checked', true); $('ddlBuyer.ClientID').val('--Choose Buyer--'); $('ddlSub.ClientID').val('--Choose Sub Category--'); $('ddlProd.ClientID').val('--Choose Product--');"); 

Однако всякий раз, когда я нажимаю на текстовое поле, с отладки включен, я получил вышеуказанную ошибку на следующей строке:

<input name="ctl00$ContentPlaceHolder1$tbxProdAC" type="text" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$tbxProdAC\',\'\')', 0)" onkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;" id="ctl00_ContentPlaceHolder1_tbxProdAC" class="completionList2" onclick="$('radProdAC.ClientID').attr('checked', true); $('ddlBuyer.ClientID').val('--Choose Buyer--'); $('ddlSub.ClientID').val('--Choose Sub Category--'); $('ddlProd.ClientID').val('--Choose Product--');" style="z-index: 1; left: 200px; top: 475px; position: absolute; height: 20px; width: 345px;" /> 

Теперь ctl00 $ ContentPlaceHolder1 $ tbxProdAC на самом деле не существует. Это элемент управления, который находится на странице содержимого внутри держателя содержимого.

Как мне обеспечить, чтобы jquery согласовывался с правильным ID или как я могу гарантировать, что владелец места содержания не изменит исходный идентификатор элемента управления?

Любая помощь, полученная мною, поскольку я схожу с ума, пробую разные вещи!

ответ

0

В обработчике событий onchange вам не нужен бит javascript, который вы можете вызвать функцию напрямую, вам нужно только это сделать, это вызов функции функцией href. Вы также не можете передавать параметры так, как вы это делаете в таймаут.

Возможно, стоит называть таймаут в функции, а не при вызове события.

В любом случае вы можете вызывать функцию в тайм-ауте аномально, например;

setTimeout(function(){youfunction here with parameters}, 0); 

Также я бы переместил все вещи, которые происходят в других событиях, щелкнув и т. Д. В свои собственные функции. Если вы переместите все это в функции, возможно, в внешний файл js, вы сможете отслеживать больше, что происходит, поскольку оно будет более четким. Также используйте firebug для отладки, если вы еще этого не сделали. Если вам нужно получить сгенерированные вары со страницы, то только о варах на странице и вызвать их из js.

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

+0

Hello Mat. Думаю, я мог бы просто сделать все это на стороне сервера, то есть на обработчике событий onchange, как вы предлагаете! По крайней мере, я знаю, что я там делаю !!! –

0
tbxProdAC.Attributes.Add( 
    "onclick", 
    "$('" + radProdAC.ClientID + "').attr('checked', true); $('" + ddlBuyer.ClientID + "').val('--Choose Buyer--'); $('" + ddlSub.ClientID + "').val('--Choose Sub Category--'); $('" + ddlProd.ClientID + "').val('--Choose Product--');" 
); 

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

"$('radProdAC.ClientID').attr('checked', true); необходимо изменить на "$('" + radProdAC.ClientID + "').attr('checked', true); везде, где он набирается.

+0

Здравствуйте, Nick. Я пробовал использовать предложенный вами синтаксис, но ошибки остаются. Самое разочаровывающее. –

+0

Можете ли вы показать нам HTML-код, предоставленный браузеру после внесения этого изменения? Это может помочь в решении этой проблемы. –