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

Posted

技术标签:

【中文标题】dojo - 显示无效消息的编程方式【英文标题】:dojo - programmatic way to show invalid message 【发布时间】:2011-09-12 05:22:29 【问题描述】:

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???

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

在jsFiddle查看它的实际应用。

    只显示工具提示:

    var textBox = bijit.byId("validationTextBox");
    dijit.showTooltip(
        textBox.get("invalidMessage"), 
        textBox.domNode, 
        textBox.get("tooltipPosition"),
        !textBox.isLeftToRight()
    );
    

    暂时切换textBox验证器,强制验证,恢复原验证器:

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

或者同时做这两个。

【讨论】:

我喜欢 :) 似乎还有更多内容,我想他们会假设您只是制作自己的小部件...? #2 为我工作,谢谢。我必须做的唯一修改是将焦点放在我的文本框上作为第一行:textBox.focus();【参考方案2】:

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

【讨论】:

【参考方案3】:

您需要在验证器方法中进行验证。喜欢这里http://docs.dojocampus.org/dijit/form/ValidationTextBox-tricks 您还需要聚焦小部件以显示消息! dijit.byId("whatever").focus()

【讨论】:

谢谢:遗憾的是,如果不通过验证器方法,我无法显示工具提示。我只是想通过 ValidationTextBox 的工具提示显示服务器交互的结果【参考方案4】:

@arber 解决方案是使用新 dojo 时的最佳选择。只需记住在调用“displayMessage”方法之前将焦点设置到 TextBox。 我正在使用 dojo 1.10,它的工作原理如下:

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

ValidationTextBox 的 Dojo 参考指南:https://dojotoolkit.org/reference-guide/1.10/dijit/form/ValidationTextBox.html

【讨论】:

【参考方案5】:

我知道这个问题很古老,但希望这会对某人有所帮助。是的,您应该使用验证器,但如果您有理由不这样做,这将显示消息并使该字段无效:

        function(textbox, state /*"Error", "Incomplete", ""*/, message) 
            textbox.focus();
            textbox.set("state", state);
            textbox.set("message", message);
        

【讨论】:

【参考方案6】:

你可以直接调用“私有”函数:

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

您会得到与@phusick 建议的结果相同的结果,但代码更少,而且可以说是以更直接、更简洁的方式。

注意事项: _set 可用于 ValidationTextBox,正如在其基类 dijit/_WidgetBase 上声明的那样。

现场演示: http://jsfiddle.net/gibbok/kas7aopq/

dojo.require("dijit.form.Button");
dojo.require("dijit.form.ValidationTextBox");
dojo.require("dijit.Tooltip");

dojo.ready(function() 

  var textBox = dijit.byId("validationTextBox");

  dojo.connect(dijit.byId("tooltipBtn"), "onClick", function() 

    dijit.showTooltip(
      textBox.get('invalidMessage'),
      textBox.domNode,
      textBox.get('tooltipPosition'), !textBox.isLeftToRight()
    );
  );

  dojo.connect(dijit.byId("validatorBtn"), "onClick", function() 
    // call the internal function which set the widget as in error state
    textBox._set('state', 'Error');
    /*
        code not necessary
        var originalValidator = textBox.validator;
        textBox.validator = function() return false;
        textBox.validate();  
        textBox.validator = originalValidator;
    */
  );

);

【讨论】:

以上是关于dojo - 显示无效消息的编程方式的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在 Dijit 对话框中制作和显示表单?

Dojo 以编程方式验证 TextBox

dojo中以编程方式与以声明方式创建的小部件之间的区别?

以编程方式填充组合框 dojo (1.8) 的最佳方法是啥?

以编程方式使 dojo 数据网格单元跨越多列

dojo 增强网格过滤器 - 以编程方式设置列 A 大于某个数字