如果搜索字段包含"预填充"触发jQuery处理程序值

时间:2015-02-14 15:04:56

标签: javascript jquery

我有一个搜索字段,当前附加了.on('input')个事件处理程序。但是,在某些情况下,如果通过URL(http://127.0.0.1/search/query-is-here)传递值,则可以预先填充搜索字段。但问题是,在用户编辑搜索字段的值之前,不会触发事件处理程序,这意味着不会自动进行搜索。

我尝试通过指定.triggerfocusclick来启动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。

2 个答案:

答案 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()然后尝试它再次在小提琴中,此时事件处理程序将触发