多个搜索输入使用“this”表示值

时间:2016-08-17 02:34:39

标签: javascript jquery

我想要实现的是在我的网站上拥有多个搜索表单,而无需为每个搜索单独调用selector。我已经尝试使用this来获取当前值并在keydown上使用它,但是只要我提交搜索,我得到的唯一值就是[object Object]。我在这里做错了什么?

HTML

  <div class="col-md-8 col-md-offset-2">
    <div class="form-horizontal">
      <div class="form-group">
        <div class="fa fa-search pull-left"></div>
        <div class="col-md-9">
          <input autocomplete="off" class="form-control SearchInput" name="search" placeholder="Search for your products!" value="" type="text">
        </div>
        <div class="checkbox">
          <label>
            <input type="checkbox">
            <span>Translate my search</span>
          </label>
        </div>
      </div>
    </div>
  </div>

JS

$('.SearchInput').bind('keydown', function(e) {
    if (e.keyCode == 13) {
            url = $('base').attr('href') + 'index.php?route=product/search';
            var search = $(this).find($('input[name=\'search\']').attr('value'));
            if (search) {
                url += '&filter_name=' + encodeURIComponent(search);
            }
            var search_directly = $("select[name='search_directly']").val();
            if (search_directly == 1) {
                url += '&search_directly=1';
            }
            location = url;
        }
    })

2 个答案:

答案 0 :(得分:3)

你的主要问题是这一行:

$('.SearchInput').bind('keydown', function(e) {
  if (e.keyCode == 13) {
    // ...

    // here, `this` is already your input, no need to call .find()
    var search = $(this).find($('input[name=\'search\']').attr('value'));

    // ...

您正在使用类SearchInput绑定所有元素上的keydown侦听器,这是您的<input>元素。这意味着,在您的事件处理程序中,this将引用事件<input>发生的当前keydown。如果您出错,请在当前<input>元素(即this)上调用find(),该元素会搜索其中的其他<input>元素,但这些元素不存在。< / p>

这就是该行的外观:

var search = $(this).attr('value');

甚至更短,您可以使用val()

var search = $(this).val();

答案 1 :(得分:1)

根据我的评论,以下是使用您的一些代码的示例:

$('.SearchInput').bind('keydown', function(e) {
  if (e.keyCode == 13) {
    var search = $(this).val();
    console.log(search);
  }
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col-md-8 col-md-offset-2">
  <div class="form-horizontal">
    <div class="form-group">
      <div class="fa fa-search pull-left"></div>
      <div class="col-md-9">
        <input autocomplete="off" class="form-control SearchInput" name="search" placeholder="Search for your products!" value="" type="text">
      </div>
      <div class="checkbox">
        <label>
          <input type="checkbox">
          <span>Translate my search</span>
        </label>
      </div>
    </div>
  </div>
</div>