首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xui js jquery喜欢现场活动

Xui js jquery喜欢现场活动
EN

Stack Overflow用户
提问于 2011-07-27 16:39:42
回答 3查看 1.4K关注 0票数 2

我正在使用xui js作为移动web应用程序。Xui js不支持像jquery $("#selector").live()那样的实时事件。我想在jquery live上写一些东西。

jquery如何处理事件委托?

谢谢您抽时间见我

Mac

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-27 16:54:52

您可以只在document上设置事件处理(如live所做的),或者更好地找到要处理的元素的父元素并绑定到该父元素(如delegate所做的)。

这是一个用来模拟jquery的delegate函数的插件。

代码语言:javascript
复制
xui.extend({
    is: function (selector) {
          var matchedNodes = x$(selector), i=0;
          for (i; i<matchedNodes.length; i++)
            if (this[0] == matchedNodes[i]) return true;
          return false;
     },
    delegate: function(selector, event, handler){
        this.on(event, function(evt){
            var elem = evt.target;

            if ( x$(elem).is(selector) ){
                handler.apply(x$(elem), arguments);
            }
        });
    }
});

使用

代码语言:javascript
复制
x$('ul').delegate('li','click', function(){ this.attr('style','color:red'); });

这将把一个侦听器绑定到ul元素,后者将处理由其后代li元素发起的click事件。(它会将单击的元素颜色更改为红色)

http://jsfiddle.net/gaby/vhsPU/上演示

票数 2
EN

Stack Overflow用户

发布于 2011-10-02 07:18:40

为了扩展Gaby的答案..。

我还需要查看是否单击了紧邻的子对象。这可以进一步扩展,像我们在jQuery中一样拥有更多真正的委托。然而,这段代码满足了我的需求。

代码语言:javascript
复制
xui.extend({
    is: function (selector) {
      var matchedNodes = x$(selector), i=0;
      for (i; i<matchedNodes.length; i++)
        if (this[0] == matchedNodes[i]) return true;
            return false;
    },
    delegate: function(selector, event, handler){
        this.on(event, function(evt){
            var elem = evt.target;

            if ( x$(elem).is(selector) ){
                handler.apply(x$(elem), arguments);
            } else{
                 if ( x$(elem.parentElement).is(selector) ){
                     handler.apply(x$(elem.parentElement), arguments);
                 }
            }
        });
    }
});
票数 3
EN

Stack Overflow用户

发布于 2011-07-27 16:48:44

作为每个事件委托系统,它利用了浏览器事件“自下而上”冒泡的事实。也就是说,如果我们有一个像这样的结构

代码语言:javascript
复制
<body>
    <div>
        <span>foobar 1</span>
        <span>foobar 2</span>
        <span>foobar 3</span>
    </div>
</body>

当有人单击内部foobar跨度时,浏览器会检查是否有任何事件处理程序绑定到该单击事件的跨度。如果是这样的话,执行它们。现在,事件“冒泡”到它的父级(div)。同样,浏览器检查是否有任何单击事件处理程序绑定到它,如果绑定,则执行,依此类推,直到document.documentElement

在上面的示例中,我们需要为每个<span>元素绑定三个事件处理程序。了解了上述概念后,我们现在只需将一个事件处理程序绑定到<div>父节点,并在event object中检查target。该目标始终是事件发生的原始元素。

还有几件事要知道。您可以停止事件的传播,例如,显式地不允许事件进一步冒泡。这可以通过调用.stopPropagation()来完成,这是来自事件对象的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6841580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档