javascript - HTML 事件加载速度比宏运行速度慢

标签 javascript html vba events

<script type="text/javascript">
						var questionType = 'RQ_CHOICE';
						var elementName="meetingQuestionAnswer(220674)";
						if(questionType=="RQ_CHOICE" || questionType=="RQ_YES_NO" ){
							$("select[name='" + elementName + "']").bind("change",function(event){
								loadDependentQuestion("220674",'select');
							});
						}
						if(questionType=="RQ_CHOICE_BULLET" || questionType=="RQ_RATING_SCALE"){
							$("input:radio[name='" + elementName + "']").bind("change",function(event){
								loadDependentQuestion("220674",'radio');
							});
						}
						bindDelegateToloadDependentQuestion("220674");
	</script>

在帮助下,我已经解决了从上一个问题的答案中触发依赖 dropboz 的问题,事件来自 JavaScript(请参阅有关此问题的链接),但现在 JavaScript 代码似乎运行得比宏慢因此,当我需要用 Excel 中的数据回答下一个问题时,宏会停止并出现错误,指出该对象不存在(因为新的下拉列表(我的对象)尚未出现)。如果我调试然后我手动逐行进行,那么它会为 JavaScript 提供时间来加载新的下拉列表,并且一切正常。

onchange event in JavaScript - dependent option list

我已经尝试在触发事件后使用 VBA 的等待函数以及带有 do 事件的循环,但它仍然不起作用。

我还做了一个 do 循环来重复这个 Action ,而对象什么也没有,但也没有工作。

这是与三个问题相关的脚本:

   
    'First question
    ieDoc.getElementsByName("question1")(0).Value = "Yes"
    event_onChange.initEvent "change", True, False
    ieDoc.getElementsByName("question1")(0).dispatchEvent event_onChange
    While ieApp.Busy Or ieApp.readyState <> 4: DoEvents: Wend
    application.wait "00:00:02"
    
    'Second question - the one that is not loading
    Do while ieDoc.getElementsByName("question2")(0) Is Nothing Then
        For i = 1 To totalRng.Cells.count
            If totalRng.Cells(i).Offset(, savingsRng.Column - Cells(i).Column) > 0 Then
                On Error Resume Next
                While ieApp.Busy Or ieApp.readyState <> 4: DoEvents: Wend
                ieDoc.getElementsByName("question2")(0).Value = "Yes"
                Exit For
            Else
                While ieApp.Busy Or ieApp.readyState <> 4: DoEvents: Wend
                ieDoc.getElementsByName("question2")(0).Value = "No"
            End If
        Next i
     Loop

最佳答案

看起来你想要一个循环直到出现并根据超时来避免潜在的无限循环。

Const MAX_WAIT_SEC As Long = 10
Dim t As Date, ele As Object
t = Timer
Do
    On Error Resume Next
    Set ele = ieDoc.querySelector("[name='meetingQuestionAnswer(221010)']")
    On Error GoTo 0
    If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While ieDoc.querySelectorAll("[name='meetingQuestionAnswer(221010)']").Length = 0
If Not ele Is Nothing Then
    'do something
End If

关于javascript - HTML 事件加载速度比宏运行速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54143773/

相关文章:

javascript - 如何使用jquery获取双击之间的时间差?

javascript - 在 Javascript 循环中分配变量

javascript - 使用 PHP 和 JavaScript 动态搜索 SQL 表并在 HTML 上显示

javascript - 如何在 Analytics.js 中始终了解最新的 cookie 过期时间

c# - 如何在 OnRowDataBound 的 gridview 中获取单元格的值?

javascript - 在元素上拖动时无法更改光标

excel - Excel VBA行中的第一个非空单元格

excel - 每 15 分钟刷新整个 Excel 工作簿(所有数据连接和计算)?

javascript - 如何使喜欢和添加到购物车图标切换外观

excel - VBA-excel中的正确数字格式