Что нового

[Автоматизация] Выбор из списка с одинаковым ID

kitov

Новичок
Сообщения
7
Репутация
0
Здравствуйте, встала проблема как выбрать из списка определенное значение. Т.е. я знаю как выбрать из списка требуемый пункт, допустим -

Код:
$oDate = _IEGetObjById ($oForm, "Date")
$aArray = IniReadSection("date.ini", "date")
If @error Then
    MsgBox(4096, "", "Error occurred, probably no INI file.")
Else
    $iRand = Random(1,28,1)
    _IEFormElementSetValue($oDate, $aArray[$iRand][0])
EndIf

или
Код:
;$oDate = _IEFormElementGetObjByName($oForm, 'date')
;_IEFormElementOptionSelect($oDate, "12");

Но вся беда в том, что для всех пунктов (а именно - день, месяц, год) используется один и тот же id.

День
Код:
<select onchange="setChangeDate(document.getElementById('date'),this.value,null,null)" style="width: 65px;">
                                                                    <option value="">-- день --</option>
                                                                    <option value="01">1</option>
                                                                    <option value="02">2</option>
                                                                   ...
                                                                    <option value="30">30</option>
                                                                    <option value="31">31</option>
                                                                </select>

Год
Код:
<select onchange="setChangeDate(document.getElementById('date'),null,null,this.value)" style="width: 70px;">
                                                                    <option value="">-- год --</option>
                                                                    <option value="2001">2001</option>
																	<option value="2002">2002</option>
                                                                </select>

Как мне выбрать конкретный ID (например ('date'),null,null,this.value) )?
К тому же нужно выбрать рандомное значение, желательно из файла, к в первом примере.
 
Автор
K

kitov

Новичок
Сообщения
7
Репутация
0
inververs, уже пытался, подправьте, пожалуйста, я не совсем понимаю, что там надо дописать :stars:

Код:
$oSelect = _IEGetObjById ($oForm, "date")
 _IEFormElementOptionSelect ($oSelect, 1, "byValue")
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
byIndex - по идексу , начало с нуля
byValue - по значению
byText - по тексту.

Вот например, выбираем нулевый индекс: (т.е самый первый выбор)
Код:
_IEFormElementOptionSelect($oSelect,0,1,'byIndex')
 
Автор
K

kitov

Новичок
Сообщения
7
Репутация
0
inververs, прописал, пытал все значения, везде так -

[box title=Лог]--> IE.au3 V2.4-0 Error from function _IEFormElementOptionSelect, $_IEStatus_InvalidObjectType[/box]

я правильно понял, что ('date'),null,null,this.value) выделенная часть есть index? и для данного случая он будет выглядеть как
Код:
_IEFormElementOptionSelect($oSelect,2,1,'byIndex')
последний пример для значения "год", т.е. там будет либо 2001, либо 2002. Их прописываем вместо 1? - так пробовал, результат отрицательный

Извиняйте, если вопрос слишком глупый :-[
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
kitov,
Дайте ссылку.
 
Автор
K

kitov

Новичок
Сообщения
7
Репутация
0
madmasles, сайт, мягко сказать, закрытый. И, к сожалению, не могу предоставить ссылку :ninja2: .

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

kitov

Новичок
Сообщения
7
Репутация
0
madmasles,
в первом сообщении был конечно

Код:
<table cellspacing="0" cellpadding="0" border="0">
                                            <tbody>
                                                <tr>
                                                    <input type="hidden" value="" name="date" id="date">
                                                    <td>
                                                        <div class="input">
                                                            <div class="input">
                                                                <select onchange="setChangeDate(document.getElementById('date'),this.value,null,null)"
                                                                    style="width: 65px;">
                                                                    <option value="">-- день --</option>
                                                                    <option value="01">1</option>
                                                                    <option value="02">2</option>
                                                                    ...
                                                                    <option value="31">31</option>
                                                                </select></div>
                                                        </div>
                                                    </td>
                                                    <td>
                                                        <div class="input">
                                                            <div class="input">
                                                                <select onchange="setChangeDate(document.getElementById('date'),null,this.value,null)"
                                                                    style="width: 100px;">
                                                                    <option value="">-- месяц --</option>
                                                                    <option value="01">января</option>
                                                                    <option value="02">февраля</option>
                                                                    ...
                                                                    <option value="12">декабря</option>
                                                                </select></div>
                                                        </div>
                                                    </td>
                                                    <td>
                                                        <div class="input">
                                                            <div class="input">
                                                                <select onchange="setChangeDate(document.getElementById('date'),null,null,this.value)"
                                                                    style="width: 70px;">
                                                                    <option value="">-- год --</option>
                                                                    <option value="2001">2001</option>
																	<option value="2002">2002</option>
                                                                </select></div>
                                                        </div>
                                                    </td>
                                                </tr>
                                            </tbody>
                                        </table>
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
kitov [?]
я правильно понял, что ('date'),null,null,this.value) выделенная часть есть index?
нет, это всего лишь параметры, которые передаются javascript функции setChangeDate при изменении выбора.


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

index здесь
<option value="">-- день --</option> - это нулевый индекс
<option value="01">1</option> - это первый
<option value="02">2</option> - это 2
итда



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

value
Эот соответственно все что указано после value=


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

text здесь
-- день --
1
2
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
kitov,
Попробуйте примерно так.
Код:
#include <IE.au3>

Local $sUrl = @ScriptDir & '\1.html', $aoSelect[4][3] = [[0],['день', '02', 'byValue'],['месяц', 'декабря', 'byText'],['год', 1, 'byIndex']]
_IEErrorHandlerRegister()
$oIE = _IECreate($sUrl)

$oTmps = _IETagNameGetCollection($oIE, 'select')

For $oTmp In $oTmps
	$sTmp = _IEPropertyGet($oTmp, 'innertext')
	For $i = $aoSelect[0][0] + 1 To 3
		If StringInStr($sTmp, $aoSelect[$i][0]) Then
			$aoSelect[0][0] += 1
			_IEFormElementOptionSelect($oTmp, $aoSelect[$aoSelect[0][0]][1], 1, $aoSelect[$aoSelect[0][0]][2])
			ExitLoop
		EndIf
	Next
	If $aoSelect[0][0] = 3 Then ExitLoop
Next
If $aoSelect[0][0] <> 3 Then Exit 13
В 1.html код Вашей страницы.
 
Автор
K

kitov

Новичок
Сообщения
7
Репутация
0
Попробуйте примерно так.
попробовал, форма как мертвая... пытался и на сайте то же самое проделать, там ошибка после $aoSelect.

inververs, спасибо большое за комментарии.
нет, это всего лишь параметры, которые передаются javascript функции setChangeDate при изменении выбора.
т.е. нужно просто передать три значения (null) одновременно? тогда как их передать через _IEFormElementOptionSelect ?

Я себе представлял все это дело следующим способом -
1) выполняется поиск пункта по id
Код:
$oDate = _IEGetObjById ($oForm, "date")
.
2)а) и вот либо после date дописывается конкретный запрос к значению (допустим, вначале запрос к дням, затем к месяцам, ну и к годам)
2)б) либо прописать запрос как-нибудь по другому, сам не знаю как... :-\

Не смейтесь, пожалуйста, а через стили нельзя эти списки развернуть? ну и затем нажать по value?
 
Автор
K

kitov

Новичок
Сообщения
7
Репутация
0
madmasles , еще раз извиняюсь, но код всей страницы и ссылку на сайт, как уже писал, не могу предоставить (имхо, на предоставленном участке кода есть все необходимое).

У меня с HTML-кодом страницы из Ответ #8 все работает
Это как-нибудь может зависеть от версии браузера? (все это выполняется на ИЕ10, пробовал включать совместимость - то же самое)
 
Верх