Ошибка выполнения Microsoft JScript: ожидается объект - PullRequest
0 голосов
/ 29 января 2010

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

В моем коде есть немного 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 с правильным идентификатором или как убедиться, что заполнитель содержимого не изменяет исходный идентификатор элемента управления?

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

Ответы [ 2 ]

0 голосов
/ 29 января 2010
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 голосов
/ 29 января 2010

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

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

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

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

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

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

...