Всплывающая подсказка об ошибке Dojo ValidationTextbox остается на странице после закрытия диалога с помощью клавиши ESC

#dojo

#dojo

Вопрос:

Я использую Dojo 1.5, тема Claro.У меня есть диалоговое окно dojo, которое содержит форму dojo, ValidationTextbox и кнопку отправки. Если в текстовом поле есть какая-либо ошибка, рядом с ней отображается всплывающая подсказка с сообщением. Теперь, если отображается всплывающая подсказка об ошибке, при нажатии клавиши ESC диалоговое окно закрывается, но всплывающая подсказка остается на странице.

Вот код, который я использую для addNewUser.html диалоговое окно:

 <form id="formAddUser" dojoType="dijit.form.Form">
    <input  type="text" id="txtUserName" style="width: 200px"
            dojoType="dijit.form.ValidationTextBox"
            required="true"
            regExp="[a-zA-Z0-9 ._-]{3,15}"
            invalidMessage="Error message"
            missingMessage="User Name is required."
            trim="true"></input>
    <div dojoType="dijit.form.Button" onClick="dijit.byId('dlgAddUser').hide();">Cancel</div>
</form>
  

Вот код, который я использую для открытия диалога:

 function ShowAddUserDialog()
{
    dojo.require("dijit.Dialog");
    dojo.require("dijit.form.ValidationTextBox");
    dojo.require("dijit.form.Form");
    dojo.require("dijit.form.Button");

    var dlg = dijit.byId("dlgAddUser");
    if (dlg == null)
        dlg = new dijit.Dialog({
            id : "dlgAddUser",
            autofocus: false
        });

    dlg.connect(dlg, "onHide", function(){ 
            dlg.destroyRecursive();
        });

    dlg.set("href", "addNewUser.html");
    dlg.set("style", "width: 370px;");
    dlg.set("title", "Add New User");
    dlg.connect(dlg, "onLoad", function(){ 
        dijit.byId("txtUserName").focus();
    });

    dlg.show();
}
  

Есть идеи по поводу этой проблемы?

Заранее спасибо.

Ответ №1:

Обычно всплывающая подсказка исчезает после того, как фокус был перемещен на другой узел, т. е. запущен при blur событии. В вашем случае, я думаю, это потому, что blur событие не запущено, поскольку вы использовали клавишу ESC для закрытия диалога.

Чтобы решить эту проблему, вы можете вручную вызвать displayMessage из dijit.form.ValidationTextBox , чтобы скрыть всплывающую подсказку.

В вашем коде

  dlg.connect(dlg, "onHide", function(){ 
        dijit.byId('txtUserName').displayMessage(''); //Add this line to hide the tooltip
        dlg.destroyRecursive();
 });