想要在 dojo 中创建一个组合框,其中下拉菜单和自动完成功能仅在用户输入 4 个字符后才启动

2024-04-09

我想在 dojo 中创建一个组合框,其中下拉菜单和自动完成功能仅在用户输入 3 个字符后才会启动。当前的默认设置将开始显示下拉菜单,并在用户输入第一个字符时自动完成。

是否有任何属性可以实现此行为?我可以重载某些函数吗?或者我应该自己编写一个单独的小部件?


我可以为您指明正确的方向:导航至此处的 API 页面:http://dojotoolkit.org/api/ http://dojotoolkit.org/api/
并抬头看dojox.validate.isText.有一个minlength可以设置返回布尔值的标志。或者,您可以使用正则表达式:`dojox.validate.regexp可以在同一页面上找到。这是使用 minlength 标志的示例。这不是最优雅的解决方案(如果组合框具有启用/禁用的自动完成限制,那就更好了),但它说明了如何为 dojo 小部件设置属性。

<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.6.0/dijit/themes/tundra/tundra.css"media="screen"/>
<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojo/dojo.js"type="text/javascript" ></script>
<script type="text/javascript">
       dojo.require("dojo.parser");
       dojo.require("dijit.form.ComboBox");
       dojo.require("dojo.store.Memory");
       dojo.require("dojox.validate._base");
       dojo.require("dijit.form.Form");
       dojo.require("dijit.form.Button");

       var myBox, myForm, myButton, mainStore, altStore, test;
       test = false;

       dojo.ready(function(){
           buildForm();
       });

       function buildForm(){

           //use this store for your data
           mainStore = new dojo.store.Memory({
               data: [
                   {name:"Alabama", id:"AL"},
                   {name:"Alaska", id:"AK"},
                   {name:"American Samoa", id:"AS"},
                   {name:"Arizona", id:"AZ"},
                   {name:"Arkansas", id:"AR"},
                   {name:"Armed Forces Europe", id:"AE"},
                   {name:"Armed Forces Pacific", id:"AP"},
                   {name:"Armed Forces the Americas", id:"AA"},
                   {name:"California", id:"CA"},
                   {name:"Colorado", id:"CO"},
                   {name:"Connecticut", id:"CT"},
                   {name:"Delaware", id:"DE"}
               ]
           });
           //bind comboBox to an empty store until validation criteria met
           altStore = new dojo.store.Memory({
              data: []
           });

           //the comboBox needs to be contained in a form to work
            myForm = new dijit.form.Form({
               encType: 'multipart/form-data',
               onSubmit: function(e){if(!myForm.validate())dojo.stopEvent(e);}
           }, dojo.doc.createElement('div'));

           //programmatically create the combobox
           myBox = new dijit.form.ComboBox({
               id: "myComboBox",
               name: "state",
               store: altStore,
               searchAttr:"name"
           });

           myButton = new dijit.form.Button({
               id: "comboBoxButton",
               label: "get value",
               onClick: function(){alert(dijit.byId('myComboBox').get('value'));}

           });

           //attach dijit elements the form and the form to the webpage
           myForm.domNode.appendChild(myBox.domNode);
           myForm.domNode.appendChild(myButton.domNode);
           dojo.byId("myDiv").appendChild(myForm.domNode);

           //event listener to check comboBox for minimum text length
           myBox.on("KeyPress", function(){
               test = dojox.validate.isText(dojo.byId("myComboBox").value, {minlength: 2});
               if (test){
                   myBox.store = mainStore;
               }
               if(!test){
                   myBox.store = altStore;
               }
           });
       }
   </script>
</head>
<body>
    <div id="myDiv" class="tundra" ></div>
</body>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

想要在 dojo 中创建一个组合框,其中下拉菜单和自动完成功能仅在用户输入 4 个字符后才启动 的相关文章

随机推荐

  • SKPhysicsJoint:接触和碰撞不起作用

    在 IOS7 1 上 使用 SpriteKit 我创建了两个简单的矩形精灵以及相应的物理体 我设置了接触和碰撞位掩码 所有工作都完全符合我的预期 检测到接触并且碰撞防止两个矩形重叠 但是 当我创建 SKPhysicsJointSpring
  • java中相关对象的序列化

    假设我有 A B 和 C 类型的对象 我有 3 个 Map 分别包含 A B 和 C 的所有实例 在内部 A和B都有C的Map 我希望能够随时存储和恢复应用程序的状态 因此 直到今天我总是序列化类似金字塔的应用程序 我会在顶部对象上调用序列
  • PostgreSQL Sqlalchemy 提交需要大量时间

    当我尝试将更改提交到表中时 需要花费大量时间 每 1000 行大约 300 秒 型号类别 class Quotes base tablename quotes id Column INTEGER primary key True autoi
  • Apache + mod_wsgi 与 nginx + Gunicorn

    我想部署一个django站点 它是github上的开源edx代码 我面临着使用之间的选择 Apache 与 mod wsgi nginx 与 Gunicorn 我已经将 Apache 与 mod wsgi 一起使用 它很酷 但我对第二个选项
  • SQL Server Reporting Services 对聚合数据运行总计

    每个人 在 SSRS 中 我们有 2 列 如下所示 Sales Running Sales 5 00 5 00 3 00 8 00 1 00 9 00 区别在于 第一列 销售额 是一个分组行 因此要获取每行的销售额总计 我们使用 Sum F
  • Mathematica:为什么 3D 绘图会记住最后的视点/旋转,即使在再次评估后也是如此?

    我觉得这有点烦人 我制作了一个 3D 绘图 最初它以默认方向出现 然后 我使用鼠标以某种方式旋转它 现在我再次运行该命令 期望获得原始形状 即通过鼠标旋转它之前的原始方向 但相反 它只是给了我与屏幕上相同的绘图 即它似乎保留 记住了该输出单
  • 从函数返回结果(javascript、nodejs)

    谁能帮我处理这段代码吗 我需要从 routeToRoom 函数返回一个值 var sys require sys function routeToRoom userId passw var roomId 0 var nStore requi
  • Memcache 统计数据理解

    Memcache telnet 接口有命令称为STATS 它显示了很多数字 我在哪里可以看到它的含义 如何分析它们 多少缓存使用是有效的等等 更新的文档位于https github com memcached memcached blob
  • 在我更改 PHP 设置后,gzopen 函数不存在 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 使用新的 PHP 5 4gzopen
  • Firebase 推送通知不适用于 iOS

    我想使用 Firebase Cloud Messaging 实现推送通知 我已经按照说明设置了我的项目并上传了 APN 证书 我正在使用发送测试消息fcmtoken到我的真实设备 我在AppDelegate中的配置如下 func appli
  • 是否可以在不同的类中编写/包装异常处理组件(try、catch)?

    这是关于将异常处理逻辑包装在某种类中 在写c 的时候 代码中 很多时候我们需要根据客户端抛出的异常来捕获许多类型 变体 这导致我们在 catch 子句中 多次 编写类似类型的代码 在下面的示例中 我编写了 function 它可以以多种可能
  • Access 2010 SQL 查询仅在完整单词的字符串中查找部分匹配

    我希望这是一个简单的 我只是找不到如何获得我想要的结果 也许我在 SQL 中使用了错误的关键字 我正在搜索包含全名字段的员工表 该字段可以是 Sam 或 Evans 先生 或 Sam Evans 先生 我正在尝试查找与另一个包含名称字段的名
  • RecyclerView onClick 无法正常工作?

    我在片段中使用 RecyclerView 来显示带有网格格式文本的图像 Recycler 视图 grid item xml 如下所示
  • 队列管理和新线程

    在 Net 4 0 框架上使用 C 我有一个 Windows 窗体主线程 迄今为止唯一的一个 等待文件系统事件 然后必须对这些事件提供的文件启动一些预定义的处理 我计划执行以下操作 A1 当主进程启动时立即创建一个单独的线程 A2 让主线程
  • python中按特定顺序读取文件

    假设我的文件夹中有三个文件 file9 txt file10 txt 和 file11 txt 我想按这个特定顺序读取它们 谁能帮我这个 现在我正在使用代码 import glob os for infile in glob glob os
  • 无法获取 OLEObject 类的 Object 属性 - Excel Interop

    我用谷歌搜索了这个问题 但未能找到解决方案 如果文件保存为 xls 而不是 xlsm 则此代码有效 我使用的是 Office 2013 32 位 我编写了一个 COM 公开的 C 类库 Excel工作簿实例化一个对象并传入对当前工作簿的引用
  • 使用airflow的DataflowPythonOperator安排数据流作业时出错

    我正在尝试使用airflow 的DataflowPythonOperator 来安排数据流作业 这是我的 dag 运算符 test DataFlowPythonOperator task id my task py file path my
  • 如何从 Azure Key Vault 中的证书获取私钥?

    我在 Azure Key Vault 中有一个证书 我想从中提取私钥 根据微软文档 https learn microsoft com en us azure key vault certificates about certificate
  • Delphi 在保存对话框中覆盖现有文件

    我正在使用 TSaveDialog 组件通过单击按钮来保存文件 但是 我在保存现有文件名时遇到问题 通常 当您想要在 Windows 中保存现有文件时 会弹出一个消息框 询问您是否确实要覆盖该文件 TSaveDialog 组件的情况并非如此
  • 想要在 dojo 中创建一个组合框,其中下拉菜单和自动完成功能仅在用户输入 4 个字符后才启动

    我想在 dojo 中创建一个组合框 其中下拉菜单和自动完成功能仅在用户输入 3 个字符后才会启动 当前的默认设置将开始显示下拉菜单 并在用户输入第一个字符时自动完成 是否有任何属性可以实现此行为 我可以重载某些函数吗 或者我应该自己编写一个