Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何强制AngluarJS表单实现已通过DOM操作(无用户输入)填写了必填字段?_Javascript_Angularjs_Excel_Internet Explorer_Vba - Fatal编程技术网

Javascript 如何强制AngluarJS表单实现已通过DOM操作(无用户输入)填写了必填字段?

Javascript 如何强制AngluarJS表单实现已通过DOM操作(无用户输入)填写了必填字段?,javascript,angularjs,excel,internet-explorer,vba,Javascript,Angularjs,Excel,Internet Explorer,Vba,我编写了一个Excel VBA宏,将一些数据粘贴到AngularJS表单中——它打开一个Internet Explorer(11)窗口,导航到包含表单的页面,并通过ID在文档树中搜索某些元素,将其值从Excel工作表中的空字符串更改为非空字符串。但是,当我提交表单时,表单逻辑将所有必填字段视为仍然为空,并在假定有问题的字段周围绘制一个红色框。(此时,我可以通过单击每个字段进行干预,在粘贴数据的末尾键入一个随机字符并立即删除它,这将触发现在填充所需字段的逻辑。) 我不是javascript程序员,

我编写了一个Excel VBA宏,将一些数据粘贴到AngularJS表单中——它打开一个Internet Explorer(11)窗口,导航到包含表单的页面,并通过ID在文档树中搜索某些元素,将其值从Excel工作表中的空字符串更改为非空字符串。但是,当我提交表单时,表单逻辑将所有必填字段视为仍然为空,并在假定有问题的字段周围绘制一个红色框。(此时,我可以通过单击每个字段进行干预,在粘贴数据的末尾键入一个随机字符并立即删除它,这将触发现在填充所需字段的逻辑。)


我不是javascript程序员,也没有设计表单(我也不能以任何方式更改表单)。我可以操作DOM元素(例如,聚焦和模糊字段,尽管这似乎不起作用),并且我可能可以运行可以在浏览器调试器的控制台中输入的任何命令。AngularJS专家是否知道一种相对简单的方法来强制表单进行自我检查?

您是否解决了这个问题,Karim或找到了解决方案?我最近有一个项目,也有同样的问题。 尝试查找带有ng submit的标记,类似于我的“ng submit”=submit($event)”。我引用了表单元素并使用了.submit。在您的情况下,请尝试以下方法:

设置HTMLFormEl=HTML.getElementById(“accountNameValue”)

HTMLFormEl.Submit

“提交”解决了我的问题。让我知道这是否适合你


我既不是VBA专家,也不是AngularJS专家,但我注意到AngularJS在处理必填字段时没有任何作用,就好像它们仍然是空白的一样。只需要找到要触发的正确事件。只是我的意见。

我不知道我的答案是否真实,但我遇到了同样的问题,我使用Application.SendKeys找到了解决方案。填写表单的函数如下所示

Function inputWrite(ByVal str As String, inputEl As Object, ByVal hwnd As LongLong) As Boolean
TryAgain_inputWrite:
    strSub = Left(str, Len(str) - 1)
    strKey = Right(str, 1)

    inputEl.Focus
    inputEl.Value = strSub
    setToFore hwnd
    Application.SendKeys strKey

    Application.Wait DateAdd("s", 1, Now)

    If (inputEl.Value = str) Then
        inputWrite = True
    Else
        GoTo TryAgain_inputWrite
    End If
End Function

setToFore只是一个让Internet Explorer始终处于其他应用程序之上的函数,这样发送键就不会丢失。

签出
$scope.$apply()
这应该在您更新表单值后运行:谢谢@Paul,我确实读过这篇文章并试图让它为我工作,但我遗漏了一些东西。假设我想让apply()函数从控制台运行,我有一个ID=“accountNameValue”格式的字段。我尝试了:
angular.element(document.querySelector('#accountNameValue')).scope().apply()但出现错误,
未捕获的TypeError:angular.element(…).scope(…).apply不是一个函数
。我不确定您是否键入了错误,但请注意
$apply()
上的
$
谢谢,我从未解决过这个问题,只是解决了它。我试过你的建议,但没能很好地发挥作用,可能只是我需要花更多的时间在上面——这个问题已经过去了,所以我真的没有能力给予更多的关注。