【问题标题】:Search input becomes disabled by jQuery keypress event & live搜索输入被 jQuery 按键事件和实时禁用
【发布时间】:2012-02-24 21:56:24
【问题描述】:

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

【问题讨论】:

    标签: jquery search live keyup


    【解决方案1】:

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

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

    【讨论】:

    • 嗯......即使被删除,我似乎也无法在搜索输入中输入
    • 这段时间 return false 是罪魁祸首。还要感谢 Chris 在验证后移动我的 evt.preventDefault() 的评论有帮助。
    【解决方案2】:

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

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

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

    你和我在一起吗?

    【讨论】:

    • 我不确定我完全明白你的意思。你能用另一种方式解释吗?
    • @RichardHartle 更新了我的答案。
    • 感谢您的帮助,但是返回 false 阻止了搜索框。尽管在确定它是按键 13 后移动 evt.preventDefault() 确实有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多