1

如果表单中的输入错误,则在执行 ajax 请求后,我试图让这个验证文本框被关注并显示指示问题的指示消息。

代码是:

dijit.byId("passwordField").focusNode.focus()

如前所述,表单元素是一个validationTextBox。

更让我困惑的是,在 dojo 1.5 之前,这段代码很简单dijit.byId("passwordField").focus(),而且运行良好。我怎样才能解决这个问题?

我也试过:

require(["dijit/focus"],function(focusU){ 
  focusU.focus(dojo.byId("ID"));});

但这也不起作用。

4

4 回答 4

2

如果 dijit.widget.focus() 失败,则 _FocuxMixin 在其启动期间未正确加载。

使用任何 dijit.form.Type,您应该能够通过以下方式成功获得焦点:

dijit.byId('ID').focus();

我认为您将 DOM 事件焦点与小部件焦点处理混淆了。如果您开火widget.focusNode.focus- 您将不会从ValidationTextBox任何浏览器中的消息传递中受益。

于 2012-07-09T15:44:45.180 回答
0

你可以在表单标签中尝试这样的事情:

<script language="javascript" type="text/javascript">
        Sys.Application.add_load
                (
                function () {
                    window.setTimeout(focus, 1);
                }
                )
        function focus() {
            if (document.getElementById('txtComm1') != null) {
                if (document.getElementById('txtComm1').disabled != true) {
                    document.getElementById('txtComm1').focus();
                }
            }
        }      

    </script>
于 2012-07-09T03:09:12.143 回答
0

如果您的表单字段位于 a 内dijit/DialogDialog则将自动关注第一个输入。您可以通过设置禁用此行为:

autofocus: false

在对话框上,之后,

widget.focus();

应该可以正常工作。

于 2016-02-05T11:31:00.687 回答
0

这对我有用...

setTimeout(function(){
    widget.focus();
}, 100);
于 2018-01-08T11:49:58.553 回答