具有子输入的Dojo ListItem

具有子输入的Dojo ListItem,dojo,Dojo,我有一个可以单击的dojo列表项。。但同时我们喜欢将输入元素放在列表项中。问题是,如果单击子元素example复选框,listitem onclick会首先截获调用,这似乎与html气泡格式相反。因此,我们不能在子元素上调用stoppropagation来阻止listitem更改页面 在下面的示例中,您将看到listitem警报出现在复选框警报之前 如何在不触发listitem的情况下处理listitem中的输入元素 小提琴:: 前 前一段时间我遇到了类似的问题,并注意到dojox/mobile

我有一个可以单击的dojo列表项。。但同时我们喜欢将输入元素放在列表项中。问题是,如果单击子元素example复选框,listitem onclick会首先截获调用,这似乎与html气泡格式相反。因此,我们不能在子元素上调用stoppropagation来阻止listitem更改页面

在下面的示例中,您将看到listitem警报出现在复选框警报之前

如何在不触发listitem的情况下处理listitem中的输入元素

小提琴::


前一段时间我遇到了类似的问题,并注意到dojox/mobile/ListItem在向其复选框、触摸手势等添加额外的事件处理程序时并不是很好,因此为了解决这个问题,我通常扩展dojox/mobile/ListItem并自行修复事件

例如:

var CheckedListItem=declaredojox/mobile/CheckedListItem[ListItem]{ _initializeCheckbox:函数{ this.checkbox=新建复选框{ }; domConstruct.placethis.checkbox.domNode,this.containerNode.firstChild,last; this.checkbox.startup; this.checkbox.onClick=this.oncheckbox单击; }, onCheckboxClick:函数{}, _setOnCheckboxClickAttr:functionhandler{ this.onCheckboxClick=handler; 如果this.checkbox!==null&&this.checkbox!==未定义{ this.checkbox.onClick=handler; } }, _onClick:function{ 如果e.target!==this.checkbox.domNode{ 这是继承的论据; } }, 后创建:函数{ 这是继承的论据; 这个._initializeCheckbox; } }; 由于重写了onClick并添加了额外的检查,我成功地获得了预期的行为

以下是一个完整的示例:

 var list1 = registry.byId("myList");
    var item = new ListItem ({
            label: "A \"programmatic\" ListItem",
            moveTo: "#",
        noArrow:true,
            onClick : function() {
                alert("listItem clicked !" + event.target.type);
            }
        });
        list1.addChild(item);
        var check = new cb({onClick:function(){alert("checkbox clicked");event.stopPropagation();}});
        check.placeAt(item.containerNode.firstChild);
        check.startup();