如何使用单个搜索框搜索2列?

时间:2014-03-27 04:43:38

标签: javascript dojo

在我的项目中,我希望通过dgrid中的名称和电子邮件找到。截至目前,我只能按姓名搜索。我使用了以下内容:

dgrid.set("query", {name: new RegExp(searchKeyword, 'i')});

如何修改此内容,以便我可以同时搜索名称和电子邮件?

jsFiddle

2 个答案:

答案 0 :(得分:1)

您尝试在单个文本框中输入两个参数,并希望根据该搜索结果进行搜索。这取决于你,你如何创造逻辑,我尝试了一些希望,这将有助于你。

我对你的代码进行了一些修改,所以我只是解释了我的所作所为。在这里,我用逗号分隔两个搜索值。

var keywordArr = searchKeyword.split(','); // separate search values by comma
var len = keywordArr.length; 
var query = {}; // search object

if(len>1){ // check whether there is two value or single
  query.name = keywordArr[0];
  if(validateEmail(keywordArr[1])){
    query.email = keywordArr[1];
  } 
} else { // if single value then
  if(validateEmail(searchKeyword)){ // check whether is it email or not
    query.email = searchKeyword;                   
  } else {
    query.name = new RegExp(searchKeyword, 'i');
  }                                                                 
}
dgrid.set("query", query); // search query

// function to validate email id
function validateEmail(email) { 
    var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
        return re.test(email);
} 

您可以在jsFiddle上试用我的代码。 谢谢

答案 1 :(得分:1)

dojo/store/Memory(称为dojo/store/util/SimpleQueryEngine)后面的查询引擎不支持 OR 操作,这意味着它无法查询所有记录:

name matches searchterm OR email matches searchterm

要解决该问题,您必须使用与默认查询引擎不同的查询引擎。目前Dojo中没有其他可用的查询引擎,但有一个称为资源查询语言的独立项目。您应该在this answer上查看Github和图书馆本身。