如何根据变量的存在来改变.keyup?

时间:2015-06-06 19:36:57

标签: javascript jquery

我正在构建一个搜索表单和.keyup中的ajax函数可以有不同的参数,我想通过检查是否存在另一个值来检查是否需要包含此arg。这就是我现在所拥有的:

var delay = (function() {
    var timer = 0;
    return function(callback, ms) {
        clearTimeout(timer);
        timer = setTimeout(callback, ms);
    };
})();
if (GLOBAL_VARS['link_id']) {
    search.keyup(function() {
        delay(function() {
            var query = search.val();
            ajaxGet(GLOBAL_VARS.distributorsSearchDistUrl, {
                'query': query,
                'pk' : GLOBAL_VARS['link_id']
            }, function(content) {
                $('#distributors').html(content);
                set_favorite();
            });
        }, 500);
    });
} else {
    search.keyup(function() {
        delay(function() {
            var query = search.val();
            ajaxGet(GLOBAL_VARS.distributorsSearchDistUrl, {
                'query': query                  
            }, function(content) {
                $('#distributors').html(content);
                set_favorite();
            });
        }, 500);
    });
}

HTML:

<div class="input-field col s6 right no-margin">
    <input id="search" type="text" class="validate" name="search">
    <label class="active" for="search">Search</label>
</div>

但是在我输入任何一个leter(a例如get)后,这只能工作一次:

search_dist?query=a&pk=64

但是当我输入aa(第二个输入)时,我得到:

search_dist?query=aa

没有pk

我做错了什么?

enter image description here

1 个答案:

答案 0 :(得分:1)

对于初学者,我建议将您的条件置于.keyup回调中。这样可以避免尝试将同一事件两次绑定到同一个元素。

search.keyup(function() {
  delay(function() {
    var data = {
      query: search.val();
    }
    if (GLOBAL_VARS['link_id']) {
      data.pk = GLOBAL_VARS.link_id;
    }
    ajaxGet(GLOBAL_VARS.distributorsSearchDistUrl, data, function(content) {
      $('#distributors').html(content);
      set_favorite();
    });
  }, 500);
});

工作plnkr