【问题标题】:jquery keyup not firingjquery keyup 没有触发
【发布时间】:2013-09-10 15:17:52
【问题描述】:

我在 keyup 事件上使用以下函数来重定向到另一个 javascript 函数。 问题是它似乎没有触发,尽管它确实将函数绑定到文本框。

$(document).ready(function () {
EnablePickTargetButton();

//clear contents; use a delay because tinyMCE editor isn't always fully loaded on document.ready
var t = setTimeout(function () {
    if (typeof textEditorForCreate != 'undefined' && tinymce.editors.length > 0)
        tinyMCE.activeEditor.setContent('');
}, 300); 

var txtSearchUser = $('#txtSearchUser');
if(typeof txtSearchUser != 'undefined')
{
    $('#txtSearchUser').keyup(function (e) {
        if (e.keyCode == 13) {
            e.preventDefault();                
            searchUser();
        }
        else
            alert('cucu');
    });
}
});

甚至没有显示警报。检查 html,我可以看到它没有将 onkeyup 添加到文本框;文本框位于表单上的 div 中托管的弹出窗口中;但在 document.ready 上,它运行该函数时不会出错。

【问题讨论】:

  • 在 jsFiddle 上运行良好 jsfiddle.net/e8JSA 你添加了 document.ready 并在文档中包含了 jQuery 吗?
  • 如果它没有触发事件,你怎么知道它已经绑定到盒子上? @Anton 评论似乎是答案。
  • @insertusernamehere URL是jsFiddle主页
  • @Anton 你比我快 9 秒。 :)
  • 是的,对我来说也很好jsfiddle.net/charaf11/nLYbX 你可能需要添加 ready() 或者你的 jquery 没有正确加载

标签: javascript jquery


【解决方案1】:

在文档或最近的静态元素上试试这个委托。 (如果元素是动态添加的)

$(document).on('keyup','#txtSearchUser',function(){
    //Code
});

【讨论】:

  • 谢谢@Anton,成功了 :)
  • 有没有办法可以找到 txtSearchUser 并通过此委托方法的第二个参数传递对象?当我尝试这样做时,它不起作用,即按键事件没有触发
【解决方案2】:

它有效:

$(document).ready(function(){
    $('#txtSearchUser').keyup(function (e) {
        if (e.keyCode == 13) {
            e.preventDefault();                


        }
        else
            alert('cucu');
    });
});

http://jsfiddle.net/jMk5S/

检查您是否正确引用了 html 元素。也许你把 id 和 class 混在一起了?

【讨论】:

    【解决方案3】:

    我编辑了你的代码并且正在工作:

    问题出在你的文档准备功能,你有一个语法错误,下次在你的浏览器中检查控制台看看有什么问题:

    DEMO HERE

    $(document).ready(function () {
    //EnablePickTargetButton();
    
    //clear contents; use a delay because tinyMCE editor isn't always fully loaded on document.ready
    var t = setTimeout(function () {
        if ($('#textEditorForCreate').length != 0 && tinymce.editors.length > 0)
            tinyMCE.activeEditor.setContent('');
    }, 300); 
    
    if($('#txtSearchUser').length!=0)
    {
        $('#txtSearchUser').keyup(function (e) {
            if (e.keyCode == 13) {
                e.preventDefault();                
                searchUser();
            }
            else
                alert('cucu');
        });
    }
    });
    

    【讨论】:

    • typeof txtSearchUser != 'undefined' - 绝对没用的检查。 jQuery 实例永远不能未定义。需要检查txtSearchUser.length
    • @YuryTarabanko 我刚刚纠正了问题,以便脚本可以正常工作,感谢您的建议,我将在答案中提及
    • @FaceOfJock:我添加了完整的文档准备功能,那里没有错误,我只是没有将它复制到 SO。我在浏览器控制台中没有收到错误。
    • @FaceOfJock:我发现了为什么 id 不起作用:这个文本框是在一个动态添加的弹出窗口中,所以,在 document.ready 的时候,这个测试框不存在于页面的html;我尝试在弹出窗口中添加一个 document.ready 处理程序来绑定事件;不工作..
    猜你喜欢
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    相关资源
    最近更新 更多