dojo—显示无效消息的编程方式

dojo—显示无效消息的编程方式,dojo,Dojo,dojo新手-尝试一下。 提交表单后,如果服务器返回错误,我希望在dijit.form.ValidationTextBox上显示该消息 var user_email = dijit.byId("login_user_email"); user_email.set("invalidMessage", data["result"]["user_email"]); //need to force show the tooltip but how??? 非常感谢您的帮助。您需要使用validator方

dojo新手-尝试一下。 提交表单后,如果服务器返回错误,我希望在dijit.form.ValidationTextBox上显示该消息

var user_email = dijit.byId("login_user_email");
user_email.set("invalidMessage", data["result"]["user_email"]);
//need to force show the tooltip but how???

非常感谢您的帮助。

您需要使用validator方法进行验证。像这里
您还需要关注小部件以显示消息!dijit.byId(“无论什么”).focus()

我认为您可以通过myVTB.displayMessage(“这来自后端验证”)显示工具提示;方法

在上查看它的操作

  • 只需显示工具提示:

    var textBox = bijit.byId("validationTextBox");
    dijit.showTooltip(
        textBox.get("invalidMessage"), 
        textBox.domNode, 
        textBox.get("tooltipPosition"),
        !textBox.isLeftToRight()
    );
    
  • 临时切换文本框验证程序,强制验证,恢复原始验证程序:

    var originalValidator = textBox.validator;
    textBox.validator = function() {return false;}
    textBox.validate();  
    textBox.validator = originalValidator;
    

  • 或者同时做这两件事。

    我知道这个问题由来已久,但希望这能帮助别人。是的,您应该使用验证器,但如果您有理由不使用,这将显示消息并使字段无效:

            function(textbox, state /*"Error", "Incomplete", ""*/, message) {
                textbox.focus();
                textbox.set("state", state);
                textbox.set("message", message);
            }
    
    您可以直接调用“private”函数:

    textBox._set('state','Error')

    您可以得到与@phusick建议的结果相同的结果,但代码更少,而且可以说是以更直接和干净的方式

    注:
    \u set
    可用于其基类
    dijit/\u WidgetBase
    上声明的
    ValidationTextBox

    现场演示:


    @使用新的dojo时,arber解决方案是最好的。在调用“displayMessage”方法之前,请记住将焦点设置为文本框。 我正在使用dojo 1.10,其工作原理如下:

    function showCustomMessage(textBox, message){
        textBox.focus();
        textBox.set("state", "Error");
        textBox.displayMessage(message);
    }
    

    ValidationTextBox的Dojo参考guid:

    谢谢:遗憾的是,如果不通过validator方法,我就无法显示工具提示。我只是想通过ValidationTextBoxI的工具提示来显示服务器交互的结果(如:)似乎会有更多关于这方面的内容,我想他们会认为您只是制作了自己的小部件…?#2为我工作,谢谢。我必须做的唯一修改是将文本框上的焦点设置为第一行:
    textBox.focus()
    
    function showCustomMessage(textBox, message){
        textBox.focus();
        textBox.set("state", "Error");
        textBox.displayMessage(message);
    }