прикрепить функцию addEventListener - PullRequest
0 голосов
/ 27 октября 2019

пытаясь автоматизировать IE с помощью Excel, VBA проверил и прочитал, и попробовал запрограммировать его так, как мне нужно

, предполагая, что в оригинале html нет прикрепленного события, как я могу добавить событиеслушатель? я знал, что мог бы быть другой способ сделать это, но я хотел бы исследовать эту функциональность слушателя событий, так как я не могу поделиться исходным html, где другой метод не работает

вот HTML для тестирования

при щелчке по нему (если есть событие щелчка), если нужно заменить два на три, я намеренно пропустил событие щелчка для этого тестирования, поэтому, пожалуйста, не изменяйте html

html

++++++

<title> Test </title>

<table id="outside">
  <tr><td id="t1">one</td></tr>
  <tr><td id="t2">two</td></tr>
</table>

<script>
function modifyText() {
  var t2 = document.getElementById("t2");
  if (t2.firstChild.nodeValue == "three") {
    t2.firstChild.nodeValue = "two";
  } else {
    t2.firstChild.nodeValue = "three";
  }
}
</script>

попробуйте ниже не работает

objIE.getElementById("t2").addEventListener "click", modifyText, False

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Вы можете попробовать использовать команды Call IE.document.parentWindow.execScript("modifyText();", "JavaScript") для выполнения функции JavaScript.

Более подробная информация, пожалуйста, проверьте следующий пример кода:

Sub Test()
    Dim IE As Object 
    Set IE = CreateObject("InternetExplorer.Application")
    With IE
        .Visible = True
        .Navigate "<the website url>"

        While IE.ReadyState <> 4
            DoEvents
        Wend
        'using Debug.Print method to find the element and check the value.
        'Debug.Print IE.document.getElementbyId("t1").innerText
        'Find the t1 node and change the innerText value.
        IE.document.getElementbyId("t1").innerText = "three"

        Call IE.document.parentWindow.execScript("modifyText();", "JavaScript")

    End With
    Set IE = Nothing
End Sub

Ресурс веб-сайта, как показано ниже:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Test</title>
</head>
<body>
    <table id="outside">
        <tr><td id="t1">one</td></tr>
        <tr><td id="t2">two</td></tr>
    </table>

    <script>
        function modifyText() {
            var t2 = document.getElementById("t2");
            if (t2.firstChild.nodeValue == "three") {
                t2.firstChild.nodeValue = "two";
            } else {
                t2.firstChild.nodeValue = "three";
            }
        }
    </script>
</body>
</html>

Результат выглядит так:

enter image description here

Редактировать : Если вы хотите прикрепить событие к элементу html из VBA, вы можете использовать следующий код:

Call IE.document.parentWindow.execScript("document.getElementById('t2').addEventListener('click', modifyText);", "JavaScript")
0 голосов
/ 27 октября 2019

Вы хотите использовать значение. var t2 = document.getElementById("t2").value

...