在JQuery中绑定事件

时间:2013-09-20 09:30:58

标签: javascript jquery bind

大家好,我知道这个事件是按下按钮进入但是如果我尝试使用绑定或它就不起作用。有什么帮助吗?

这是我的活动:

$.fn.enterKey = function (fnc) {
    return this.each(function () {
        $(this).keypress(function (ev) {
            var keycode = (ev.keyCode ? ev.keyCode : ev.which);
            if (keycode == '13') {
                fnc.call(this, ev);
            }
        })
    })
}

如果我尝试这样做:

    $('.foo').on('enterKey', function() {
    // other code --> doesn't work
    });

    $('.foo').bind('enterKey', function() {
    // other code --> doesn't work
    });

这是我的代码:

var add_comment = { // add comment
    urlRemove : CI_ROOT + 'add_comment_team/',
    run : function() {
        add_comment.share('.comment');
    },
    share : function(obj) {
        var alreadySent = false;
        $(obj).enterKey(function() {
            var comment = $(this);
            if (comment.val() != "") {
                if(!alreadySent) {
                     alreadySent = true; 
                     $.ajax({
                        type: "POST",
                        url:  add_comment.urlRemove,
                        data: "text=" + comment.val() + "&post_id=" + comment.attr('id'),
                        success: function(html) {
                            comment.val('');
                            comment.closest('.shared_box').children('.recent_comment').append(html);
                            alreadySent = false;
                        },
                        error: function(){
                            alert('Error on ajax call');
                            alreadySent = false;
                        }
                    }); 
                } 
            } else {
                return false;
            }
        }); 
    }

};

我尝试使用触发器执行此操作,但仍无法正常工作

var add_comment = { // add comment
    urlRemove : CI_ROOT + 'add_comment_team/',
    run : function() {
        add_comment.share('.comment');
    },
    share : function(obj) {
        var alreadySent = false;
        $(document).on('enterKey',obj, function() {
            var comment = $(this);
            if (comment.val() != "") {
                if(!alreadySent) {
                     alreadySent = true; 
                     $.ajax({
                        type: "POST",
                        url:  add_comment.urlRemove,
                        data: "text=" + comment.val() + "&post_id=" + comment.attr('id'),
                        success: function(html) {
                            comment.val('');
                            comment.closest('.shared_box').children('.recent_comment').append(html);
                            alreadySent = false;
                        },
                        error: function(){
                            alert('Error on ajax call');
                            alreadySent = false;
                        }
                    }); 
                } 
            } else {
                return false;
            }
        });

        $(obj).trigger('enterKey');

    }

};

2 个答案:

答案 0 :(得分:0)

 $('.foo').enterKey();

您尚未发布任何事件,您刚刚向 jQuery.prototype

添加了名为enterkey的方法

$.fn指向 jQuery.prototype 。您添加到它的任何方法或属性都可用于jQuery包装对象的所有实例。因此,它应该可以工作。

确保正确触发它。

答案 1 :(得分:0)

你可以尝试这个:

$(document).on('enterKey', '.foo', function() {
   // other code --> might work
});

将事件委托给文档或最近的静态父级。

来自文档:

  

当我们使用.on()方法定义自定义事件类型时,.trigger()的第二个参数可能会有用。

.trigger() documentation @ jQuery

或者您可以添加.trigger()方法:

$('.foo').trigger('enterkey');