Как веб-страница узнает, когда я взаимодействую с элементом, если у него нет обработчиков событий? - PullRequest
1 голос
/ 17 ноября 2011

Я пытался использовать WebBrowser для очистки этого сайта и пытался программно изменить количество отображаемых страниц до 200. Если вы вручную измените значение раскрывающегося меню, оно обновится результаты будут отображать любое количество результатов, которые вы выберете, но если вы сделаете это с введенным JavaScript (поскольку WebBrowser позволяет внедрять код JavaScript в вашу локальную копию страницы), значение изменится, но страница не обновится.

Я также попытался запустить событие onchange, используя menu.onchange() и menu.fireEvent("onchange") (где menu - элемент select), но ничего не произошло. Затем я просто просмотрел каждое событие (по крайней мере, так я думаю) в элементе select, выполнив цикл for..in и отобразив каждый элемент, начинающийся с on..., следующим образом:

for(var i in menu)
{
    if(("" + i).indexOf("on") == 0) alert("" + i + " => " + menu[i])
}

И я заметил, что каждое событие было null. Как страница может узнать, что я изменяю значение, если каждое событие null?

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

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

Страница использует jQuery для привязки обработчика события change к элементу. Обработчик события change отправляет родительскую форму. В main.js, строки 268-272 можно найти следующее:

var pagingControls = $('.page_size select');
if(pagingControls.length >= 1)
{
    pagingControls.change( function(){ this.parentNode.submit();})
}

Привязка обработчика событий таким способом не приведет к изменению свойства самого элемента, поэтому при просмотре свойств on... ничего не отображается.

0 голосов
/ 10 апреля 2012

Если вы хотите вызвать событие на стороне сервера, используйте вот так webBrowser1.Document.GetElementById("ctl00_ContentPlaceHolder1_drpType").InvokeMember("onchange");

где onзнак - событие на стороне сервера

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