window.opener.document.getElementById (идентификатор кнопки) .click () приводит к ошибке JavaScript в Chrome - PullRequest
0 голосов
/ 25 января 2012

Google Chrome выдает эту ошибку JavaScript

Uncaught TypeError: Object javascript:__doPostBack('ctl00$MainContentPlaceHolder$lnkBtnHidden','') has no method 'click'

при выполнении этой строки

window.opener.document.getElementById('ctl00_MainContentPlaceHolder_lnkBtnHidden').click();

Я проверил, что элемент управления находится на открывающей странице и что идентификатор кнопки такой же, но window.opener.document.getElementById('ctl00_MainContentPlaceHolder_lnkBtnHidden') возвращает это, а не объект:

javascript:__doPostBack('ctl00$MainContentPlaceHolder$lnkBtnHidden','')

Это происходит только в Chrome ...

РЕДАКТИРОВАТЬ: Код, используемый для открытия окна, выглядит следующим образом:

win= window.open('/PageName.aspx?qs=qsValue','','scrollbars=1,width=1000,height=950');
win.moveTo(0,0);

1 Ответ

1 голос
/ 26 января 2012

Не смущайтесь возвращенным

    
javascript:__doPostBack('ctl00$MainContentPlaceHolder$lnkBtnHidden','') 

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

Я уже написал в комментарии, что click () в (моем) Chrome не работает с a-элементами. Это работает для меня в input[type=submit], но, возможно, ваша chrome-версия не поддерживает это. Но это не имеет значения, если вы не можете полагаться на тот факт, что click () работает где угодно.

Когда ваш подход с использованием dispatchEvent () не работает, я полагаю, что ваша реализация неверна, вот пример функции:

//@param obj element where to simulate the click
function simclick(obj)
{

  if(document.fireEvent) {
    obj.fireEvent("onclick"); 

    }
   else if(document.dispatchEvent) { 
    var oEvent = document.createEvent( "MouseEvents" );
    oEvent.initMouseEvent("click", true, true,window, 1, 1, 1, 1, 1, false, false, false, false, 0, obj);
    obj.dispatchEvent( oEvent );
    } 
}

Что еще: вы должны переместить вызов javascript:__doPostBack() из атрибута href в атрибут onclick. В противном случае нет гарантии, что функция будет вызвана (в зависимости от браузера).

см. Пример: http://fiddle.jshell.net/doktormolle/swR59/show/
opener-source: http://jsfiddle.net/doktormolle/swR59/
popup-source: http://jsfiddle.net/doktormolle/vHwCr/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...