我有一个搜索字段,当前附加了.on('input')
个事件处理程序。但是,在某些情况下,如果通过URL(http://127.0.0.1/search/query-is-here
)传递值,则可以预先填充搜索字段。但问题是,在用户编辑搜索字段的值之前,不会触发事件处理程序,这意味着不会自动进行搜索。
我尝试通过指定.trigger
,focus
,click
来启动change
,但似乎没有任何工作(是的,我确实更改了事件处理程序到.on('input focus')
例如)。什么是裂缝?
-
JS文件(在触发器之前在页脚中引用)
$('#search').on('input focus', function(e) {
e.preventDefault();
// various if statements and variable assignments
}
触发
// codeigniter -> http://ip.com/{segment 1}/{segment 2} -> this does get executed
<?php if($this->uri->segment(1) == "search" && $this->uri->segment(2)):?>
<script>
$('#search').focus();
$('#search').trigger("focus");
</script>
<?php endif; ?>
我对$('#search').trigger("focus");
的理解是它应该触发附加到#search
的事件处理程序,并在该函数中执行JS。
答案 0 :(得分:0)
您已订阅该活动&#39;输入焦点&#39;并触发事件&#39;焦点&#39;我想你会想要订阅这两个活动。
$('#search').on('focus', myHandler);
$('#search').on('focus input', myHandler);
答案 1 :(得分:0)
为什么要将e.preventDefault()放在焦点上? event.preventDefault()方法停止发生元素的默认操作。
从代码中删除e.preventDefault()并再次尝试。
$('#search').on('input focus', function(e) {
//remvoe this line>> e.preventDefault();
// various if statements and variable assignments
}
以下是jsfiddle链接: https://jsfiddle.net/shrawanlakhe/c8v5v788/1/
我还在处理程序上放置了e.preventDefault(),它阻止了单击事件处理程序的触发。所以首先尝试它并且单击事件处理程序不会触发然后删除e.preventDefault()然后尝试它再次在小提琴中,此时事件处理程序将触发