搜索输入被jQuery keypress event& amp;生活

时间:2012-02-24 21:56:24

标签: jquery search live keyup

我不明白为什么$('#searchbox')。live会阻止输入我的搜索输入。我可以记录该事件但没有显示任何内容。但是,当我评论出搜索框行时,它突然似乎允许搜索框中的文本。加上通过放大镜点击搜索功能!很奇怪。

有没有人有这样的问题?

我以这种方式构造它的原因是因为我希望我的其他应用程序使用此函数。

function initModuleSearch(selector){
    $('#clear_x').live('click', {name:'clear', id:selector}, performSearch);//clears search
    $('#magnify').live('click', {name:'find', id:selector}, performSearch);//submits search
    $('#searchbox').live('keyup', {name:'enter', id:selector}, performSearch);//submits search
    return false;
}

function performSearch(evt){
    var eventType = evt.type;        
    var eventName = evt.data.name;
    var selector = evt.data.id;
    var searchInput = $('#searchbox');

    console.log('Hello:' + eventName)

    //do some search and filter stuff below here

   evt.preventDefault();//disallow browser to perform default action
   return false;
}



initModuleSearch(".module");//init searchbox function

2 个答案:

答案 0 :(得分:0)

你抓住keyup-event,调用performSearch-function并传递事件,然后在那个函数中调用.preventDefault()那个事件,我相信这会阻止键击在输入中注册

你可能会尝试类似的事情:

if (eventType !== "keyup")
   evt.preventDefault();

这样,将阻止您对其他元素的点击,但您仍然可以输入搜索输入。

<强>澄清:

您添加的三个初始事件监听器:

$('#clear_x').live('click', {name:'clear', id:selector}, performSearch);//clears search
$('#magnify').live('click', {name:'find', id:selector}, performSearch);//submits search
$('#searchbox').live('keyup', {name:'enter', id:selector}, performSearch);//submits search

全部调用相同的函数performSearch。在该函数中,您将捕获刚刚捕获的事件evt(在搜索框的情况下,即keyup-event),然后在其上调用.preventDefault()方法{{1} },告诉浏览器放弃这个keyup-event的默认行为,通常是将你刚刚描边的键的字符添加到input-field中。当你说evt.preventDefault()时,你告诉浏览器“不要这样做,让我做一些其他的自定义内容而不是......”,所以浏览器不会将这个按键添加到输入字段。

你和我在一起吗?

答案 1 :(得分:0)

evt.preventDefault();甚至return false会阻止您在文本框中输入任何内容。

如果您认为不需要,请将其从方法中移除。