Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery:绑定名称空间事件_Jquery - Fatal编程技术网

jQuery:绑定名称空间事件

jQuery:绑定名称空间事件,jquery,Jquery,如果事件是命名空间,是否可以侦听一个基本事件的所有事件 例如: $elmt.bind("change", function (event) { console.log(event); }); $elmt.trigger("change.namespace1"); $elmt.trigger("change.namespace2"); 只有当我绑定到完整的事件名称时,这才有效,但这是我在这个位置上不知道的:(你可以,但这并不完美 例如: function eventHandler(eve

如果事件是命名空间,是否可以侦听一个基本事件的所有事件

例如:

$elmt.bind("change", function (event) {
    console.log(event);
});
$elmt.trigger("change.namespace1");
$elmt.trigger("change.namespace2");

只有当我绑定到完整的事件名称时,这才有效,但这是我在这个位置上不知道的:(

你可以,但这并不完美

例如:

function eventHandler(event){
    $("#output").html($("#output").html() + "<br />" + event);
}

$elmt = $("#elmt");
$elmt.bind("change.namespace1", eventHandler);
$elmt.bind("change.namespace2", eventHandler);

$elmt.trigger("change.namespace1");
$elmt.trigger("change.namespace2");
函数eventHandler(事件){
$(“#输出”).html($(“#输出”).html()+“
”+事件); } $elmt=$(“#elmt”); $elmt.bind(“change.namespace1”,eventHandler); $elmt.bind(“change.namespace2”,eventHandler); $elmt.trigger(“change.namespace1”); $elmt.trigger(“change.namespace2”);

您需要从事件中提取名称空间并打开它,因为两个名称空间都是为基本的“更改”事件触发的,这几乎意味着您需要使用“仅”名称空间,或者不使用名称空间

我希望这能有所帮助。


尝试
triggerAll
而不是
trigger

(function($) {
    $.fn.triggerAll = function(topics, data, delimiter) {
        return this.each(function() {
            var $this = $(this), chain = [], t = '';
            delimiter = (delimiter || '.');
            // rebuild chain
            $.each(topics.split(delimiter), function(i,n) {
                t += (i == 0 ? '' : delimiter) + n;
                chain.push(t);
            });

            // append/prepend original topic?
            data = (data || []);
            data.push(topics);
            $.each(chain, function(i,t) {
                $this.trigger(t, data);
            });
        });
    };
})(jQuery);
诚然,由于jQuery处理触发名称空间的方式,触发“root”事件实际上会触发名称空间版本,因此要获得预期的结果,需要使用另一个字符作为分隔符,如
/
,然后声明事件,如:

var $o = $('#whatever');
// this will be triggered for all events starting with 'root'
$o.on('root', function () { console.log(Array.prototype.slice.call(arguments, 0)); });
// some arbitrary way to fire custom events
$o.on('click', function () {
    $o.triggerAll('root/custom1/subA', ['1st', '2nd'], '/');
    $o.triggerAll('root/custom2', [3, 4, 5], '/');
});

这是我用来比较每个li元素上的现有主题并替换为新的自定义主题的内容

$('li').each(function(index) {
                  var oT = $(this).attr('data-theme');
                  var li_item = $(this).attr(index);

                    $('#li_item ').mousedown(function() {

                        if(oT=='a')
                         {
                           $(this).removeClass('ui-btn-up-' + a').addClass('ui-btn-up-' + 'c').attr('data-theme', 'c');
                         }  

                    });

                    $('#li_item ').mouseup(function() {


                        if(oT=='c')
                         {
                           $(this).removeClass('ui-btn-up-' + 'c').addClass('ui-btn-up-' + 'a').attr('data-theme', 'a');
                         }   

                    });

}))

您到底想做什么?jquery插件会触发名称空间的更改事件(change.channel、change.selected和其他)。如果触发了某个更改事件,我想执行一个操作。我不会硬编码所有可能的名称空间。只是在我发布后遇到了你的问题。我也想知道这是否可行。