0

我不明白为什么 $('#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
4

2 回答 2

0

您捕获 keyup 事件,调用 performSearch 函数并传递事件,然后在该函数中调用.preventDefault()on 该事件,我相信这会阻止击键在输入中注册。

您也许可以尝试以下方法:

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

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

澄清:

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

$('#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() 方法evt.preventDefault(),该方法告诉浏览器放弃其默认值此 keyup 事件的行为,通常是将您刚刚敲击的键的字符添加到输入字段中。当您说 时evt.preventDefault(),您告诉浏览器“不要那样做,让我做一些其他自定义的东西……”,因此浏览器不会将该击键添加到输入字段。

你和我在一起吗?

于 2012-02-24T22:00:19.600 回答
0

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

如果您觉得不需要,则将其从方法中删除。

于 2012-02-24T22:00:35.833 回答