Что нового

[Сеть, интернет] Select -> Option без form на javascript - срабатывание fireEvent

WR-e-D

Новичок
Сообщения
53
Репутация
3
оказался в небольшом затруднении прошу помощи.
Код:
catalog.1001z.ru/bmw/ - заходим в BMW, переходим попунктам, пока не доходим до select
http://d.pr/i/fYYS

И тут бы не проблема - select спокойно выбирается по _IEFormElementOptionSelect
Код:
$oSelect = _IETagNameGetCollection($oIE, "SELECT")
  If Not $recordFinded = 1 Then
For $oSelect In $oSelects
If _IEFormElementOptionSelect($oSelect, $autoRecords[$i], 1, "byText") = 1 Then
             _Added($Edith, "Пункт найден - выбор селекта", 30)
		$recordFinded = 1
		 ExitLoop 2
EndIf
  Next
  EndIf


Но не происходит fireEvent (возможно ли из-за версии ie8?) и следовательно не происходит ивент onhashchange - что например при выборе select - a вручную "год 2008" добавит новый селект с выбором месяца.

Промучался 10 часов раз 5 уже собирался писать эту тему, и всетаки здался )


Добавлено:
Сообщение автоматически объединено:

Неужели никто не поможет ?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Вот так можно сделать.
Выбирает 2006 год

Код:
#include "ie.au3"
$oIE = _IEAttach('http://catalog.1001z.ru','URL')
If @error Then Exit 1
$oSelect = _IEGetObjByName($oIE,'03')
$oItems = $oSelect.options
For $oItem In $oItems
	ConsoleWrite($oItem.text & @LF)
	If $oItem.text = 2006 Then
		$oItem.selected = True
		;Для Internet Explorer 9 Standards mode.
		$o_Evt = $oItem.document.createEvent("HTMLEvents")
		$o_Evt.initEvent("change", True, False)
		$oItem.dispatchEvent($o_Evt)
		ExitLoop
	EndIf
Next
 
Автор
WR-e-D

WR-e-D

Новичок
Сообщения
53
Репутация
3
Спасибо. Мне уже помогли на английском форуме.
Вот вариант который работает и в 8-ом IE, может кому и поможет.
Код:
#include <IE.au3>
$the_URL = 'http://catalog.1001z.ru/bmw/#c3Q9PTQwfHxzdHM9PXsiMTAiOiJcdTA0MWNcdTA0MzBcdTA0NDBcdTA0M2FcdTA0MzAiLCIyMCI6IkJNVyIsIjMwIjoiMSBFODIiLCI0MCI6Ilx1MDQzYVx1MDQ0M1x1MDQzZlx1MDQzNSAxMThkIn18fGJtdD09Qk1XfHxicD09UHx8ZnY9PVZUfHxiYj09RTgyfHxtb2RlbD09MTE4ZHx8c21vZGVsPT1Db3V8fGVtb2RlbD090LrRg9C%2F0LV8fGljbz09MTY1NzI3'
$oIE = _IECreate($the_URL)
Sleep(2000);time given for JAVA to load some page elements, otherwise, you will get NO "select" elements

_ChangeSelect('01', 2);select 2nd element in 1st "select" control
Sleep(1000);time given for java to react and execute the function
_ChangeSelect('02', 1);select 1st element in 2nd "select" control
Sleep(1000);time given for java to react and execute the function
_ChangeSelect('03', 1);select 1st element in 3rd "select" control
Sleep(1000);time given for java to react and execute the function
_ChangeSelect('04', 3);select 3rd element in 4th "select" control
Sleep(1000);time given for java to react and execute the function

Func _ChangeSelect($SelName, $OptIndex)
    Local $oSelects = _IETagNameGetCollection($oIE, 'select')
    For $oSelect in $oSelects
        If $oSelect.name == $SelName Then
            Local $oOptions = $oSelect.options
            Local $Counter = -1
            For $oOption in $oOptions
                $Counter += 1
                If $Counter = $OptIndex Then
                    $oIE.document.parentWindow.execScript('HM.set("' & $oOption.value & '");')
                    Return
                EndIf
            Next
            Return
        EndIf
    Next
EndFunc

MsgBox(0, 'DONE!', 'Press OK to close the script')
_IEQuit($oIE)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
OffTopic:
WR-e-D [?]
может кому и поможет
Сомневаюсь! На нашем форуме подобная техника была описана неоднократно, однако вам же не помогло. ;)
 
Автор
WR-e-D

WR-e-D

Новичок
Сообщения
53
Репутация
3
OffTopic:
Возможно плохо искал
 
Верх