我想要实现的是在我的网站上有多个搜索表单,而不必为每个搜索单独调用一个单独的选择器.我已经尝试搞乱这个以获取当前值并在keydown上使用它但是无论何时我提交搜索,我得到的唯一值是[object Object].我在这做错了什么?
<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;
}
})
解决方法:
你的主要问题是这一行:
$('.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>元素.这意味着,在您的事件处理程序中,这将引用当前的< input>事件发生的事件发生了.您出错的地方是在当前< input>上调用find()元素(即this)搜索其他< input>里面的元素,那些不存在.
这就是该行的外观:
var search = $(this).attr('value');
甚至更短,你可以使用val()
var search = $(this).val();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。