0

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

这是我的活动:

$.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');

    }

};
4

2 回答 2

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

您还没有进行任何事件,您只是添加了一个调用enterkeyjQuery.prototype的方法

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

确保正确触发它。

于 2013-09-20T09:34:09.640 回答
0

你可以试试这个:

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

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

从文档:

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

.trigger() 文档@jQuery

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

$('.foo').trigger('enterkey');
于 2013-09-20T09:41:26.313 回答