Autocomplete 想在dojo中创建一个组合框,只有在用户输入4个字符后,下拉菜单和自动补全功能才会启动

Autocomplete 想在dojo中创建一个组合框,只有在用户输入4个字符后,下拉菜单和自动补全功能才会启动,autocomplete,combobox,dojo,Autocomplete,Combobox,Dojo,我想在dojo中创建一个组合框,只有在用户输入3个字符后,下拉菜单和自动补全功能才会启动。当前默认设置将开始显示下拉菜单,并且在用户输入第一个字符时自动完成 这种行为有什么特点吗?我可以重载一些函数吗?或者我应该自己编写一个单独的小部件吗?我可以为您指出正确的方向:导航到API页面: 并查找dojox.validate.isText.有一个minlength标志,可以设置该标志以返回布尔值。或者,可以使用正则表达式:`dojox.validate.regexp,可以在同一页上找到。下面是一个使用

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


这种行为有什么特点吗?我可以重载一些函数吗?或者我应该自己编写一个单独的小部件吗?

我可以为您指出正确的方向:导航到API页面:
并查找
dojox.validate.isText.
有一个
minlength
标志,可以设置该标志以返回布尔值。或者,可以使用正则表达式:
`dojox.validate.regexp
,可以在同一页上找到。下面是一个使用minlength标志的示例。这并不是最优雅的解决方案(如果comboBox有一个启用/禁用自动完成约束也会更好),但它说明了如何为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>

require(“dojo.parser”);
require(“dijit.form.ComboBox”);
require(“dojo.store.Memory”);
dojo.require(“dojox.validate._base”);
require(“dijit.form.form”);
require(“dijit.form.Button”);
var myBox、myForm、myButton、mainStore、altStore、test;
测试=假;
ready(function()){
buildForm();
});
函数buildForm(){
//使用此存储存储您的数据
mainStore=new dojo.store.Memory({
数据:[
{姓名:“阿拉巴马州”,id:“AL”},
{姓名:“阿拉斯加”,id:“AK”},
{名称:“美属萨摩亚”,id:“AS”},
{姓名:“亚利桑那州”,id:“亚利桑那州”},
{姓名:“阿肯色州”,id:“AR”},
{名称:“欧洲武装部队”,id:“AE”},
{姓名:“太平洋武装部队”,id:“AP”},
{姓名:“美洲武装部队”,id:“AA”},
{姓名:“加利福尼亚”,id:“CA”},
{姓名:“科罗拉多”,id:“CO”},
{姓名:“康涅狄格州”,id:“CT”},
{姓名:“特拉华州”,id:“德”}
]
});
//将comboBox绑定到空存储,直到满足验证条件
altStore=new dojo.store.Memory({
数据:[]
});
//组合框需要包含在表单中才能工作
myForm=新的dijit.form.form({
encType:“多部分/表单数据”,
onSubmit:function(e){if(!myForm.validate())dojo.stopEvent(e);}
},dojo.doc.createElement('div');
//以编程方式创建组合框
myBox=新的dijit.form.ComboBox({
id:“myComboBox”,
名称:“国家”,
商店:altStore,
searchAttr:“名称”
});
myButton=新建dijit.form.Button({
id:“comboBoxButton”,
标签:“获取价值”,
onClick:function(){alert(dijit.byId('myComboBox').get('value');}
});
//将表单和表单中的dijit元素附加到网页
myForm.domNode.appendChild(myBox.domNode);
myForm.domNode.appendChild(myButton.domNode);
dojo.byId(“myDiv”).appendChild(myForm.domNode);
//事件侦听器要选中最小文本长度的组合框
myBox.on(“按键”,函数(){
test=dojox.validate.isText(dojo.byId(“myComboBox”).value,{minlength:2});
如果(测试){
myBox.store=mainStore;
}
如果(!测试){
myBox.store=altStore;
}
});
}

谢谢您的回答。但这对我没有帮助。我对dojo有点生疏。我想您的回答将有助于验证用户输入的输入字符串。但是如何将其连接到组合框?就像我希望下拉菜单仅在用户输入3个字符后显示。如何将minlength标志设置为3将组合框的行为更改为仅在输入3个字符后才下拉。我没有领会您的意思。@kiran我添加了一些代码,向您举例说明如何使用minlength标志设置comboboxRelated的限制: