Вызывать событие «onChange», когда элемент ввода изменен с помощью JavaScript из всплывающего окна. - PullRequest
8 голосов
/ 13 мая 2009

У меня есть веб-страница с элементом формы и всплывающим окном (открывается window.open).

У обоих есть jQuery.

Во всплывающем окне есть JavaScript, который может изменить элемент формы в открывшемся окне. Это прекрасно работает, делая ...

$(opener.document.formelement).val(vals[0]);

Однако при этом событие onChange не сработает. Это потребуется для некоторых других элементов страницы. Поэтому я попытался запустить событие onChange самостоятельно с помощью

$(opener.document.formelement).change();

Но это ничего не делает.

Есть намеки? Мне определенно нужно, чтобы событие onChange было запущено из-за архитектуры других элементов страницы.

Этот вопрос похож на Вызов события Javascript onchange путем постепенного изменения значения текстового поля , но предлагаемые решения этого вопроса, похоже, не работают для меня. Может быть, это из-за всплывающего окна.

Ответы [ 3 ]

10 голосов
/ 13 мая 2009

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

В открывалке:

window.changeMyElement = function(value) {
  $(formelement).val(value).change();
}

Из всплывающего окна:

opener.changeMyElement(value);
2 голосов
/ 13 мая 2009

Эта строка должна работать:

$(opener.document.formelement).change();

В соответствии с документацией jQuery эта строка вызывает событие изменения каждого соответствующего элемента.

Если это не работает для вас, значит, где-то есть проблема в вашем коде. Можете ли вы вызвать событие onchange, вручную изменив элемент формы?

0 голосов
/ 06 апреля 2010

Вы также можете сделать:

window.opener.document.getElementById('controlname').fireEvent('onchange');

Или в вашем контексте:

$(opener.document.formelement).fireEvent('onchange');
...