Возможный дубликат:
Как вызвать событие OnChange в "Выбрать" ? (Delphi - WebBrowser)
Привет,
Я загружаю веб-страницу в Twebrowser в delphi, веб-страница имеет форму с раскрывающимся списком. Я могу заставить свою программу выбирать идентификатор элемента, как в раскрывающемся меню, но опция выбора имеет событие onchange, как я могу запустить событие onchange в delphi без использования execScript ('yourfunctioname()', 'JavaScript').;
heres select с событием onChnage
<select align="left" id="carrierNameDropDown_UNSHIPPEDITEMS" onChange="MYO.ES.OtherCarrierToggle (this, 'UNSHIPPEDITEMS' )">
<option value="0" selected="1" >Select</option>
<option value="Chronopost" >Chronopost</option>
<option value="City Link" >City Link</option>
<option value="DHL" >DHL</option>
<option value="DPD" >DPD</option>
<option value="Deutsche Post" >Deutsche Post</option>
<option value="Fastway" >Fastway</option>
<option value="FedEx" >FedEx</option>
<option value="GLS" >GLS</option>
<option value="GO!" >GO!</option>
<option value="Hermes Logistik Gruppe" >Hermes Logistik Gruppe</option>
<option value="La Poste" >La Poste</option>
<option value="Parcelforce" >Parcelforce</option>
<option value="Parcelnet" >Parcelnet</option>
<option value="Poste Italiane" >Poste Italiane</option>
<option value="Royal Mail" >Royal Mail</option>
<option value="SDA" >SDA</option>
<option value="Smartmail" >Smartmail</option>
<option value="TNT" >TNT</option>
<option value="Target" >Target</option>
<option value="UPS" >UPS</option>
<option value="Yodel" >Yodel</option>
<option value="Other">
Specify carrier:
</option>
</select>
Я заработал, выполнив:
if EmbeddedWB1.Document <> nil then begin
if EmbeddedWB1.Document.QueryInterface(IHTMLDocument3,docb) = S_OK then begin
elb := docb.getElementById('carrierNameDropDown_UNSHIPPEDITEMS');
if elb <> nil then begin
(elb as IHTMLSelectElement).value := 'Parcelforce';
OleVariant (elb as IHTMLElement). FireEvent ('onchange');
end;
Это будет работать:
uses
MSHTML;
procedure TBrowserPageIE.Test;
var
doc : IHTMLDocument3;
el : IHTMLElement;
v : OleVariant;
begin
if FBrowser.Document <> nil then begin
if FBrowser.Document.QueryInterface(IHTMLDocument3,doc) = S_OK then begin
el := doc.getElementById('carrierNameDropDown_UNSHIPPEDITEMS');
if el <> nil then begin
(el as IHTMLSelectElement).value := 'UPS';
(el as IHTMLElement3).FireEvent('onchange', v);
end;
end;
end;
end;
и это с поздним связыванием
procedure TBrowserPageIE.Test;
var
doc : IHTMLDocument3;
el : OleVariant;
v : OleVariant;
begin
if FBrowser.Document <> nil then begin
if FBrowser.Document.QueryInterface(IHTMLDocument3,doc) = S_OK then begin
el := doc.getElementById('carrierNameDropDown_UNSHIPPEDITEMS');
el.value := 'UPS';
el.FireEvent('onchange', v);
end;
end;
end;