如何在YUI节点上禁用单击处理程序?

时间:2009-10-02 13:02:45

标签: javascript dom yui

我希望能够禁用单选按钮的点击功能,以便我可以取消选中它。

但是,当我取消选中它时,点击仍然会触发,最终结果是取消选择的广播(并相应地修改其他页面元素),然后由于onclick事件重新检查。

    var clickFunction = function(e, radio, p){
        var checked = radio.get("checked");
        radio.set("checked", !checked);
    };
    this.controlNode = Y.Node.create("<input id='" + id + "' onclick='function(e){return false;}' type='radio' name='" + parent.id + "'>");
    this.label = Y.Node.create("<label for='" + id + "'>" + display + "</label>");
    Y.on("mousedown", clickFunction, this.label, this.controlNode, parent.controlNode);
    parent.controlNode.appendChild(this.controlNode);
    parent.controlNode.appendChild(this.label);

使用mousedown事件处理程序,因为它适用于(窗口)触摸屏上的胖手指,并且mousedown和mouseup之间的移动不构成点击。 (用手指轻敲一下,手指会增加和减少屏幕上的表面积,非多点触控屏幕将光标放在接触点的平均值上。轻微的滚动会移动光标)。

鼠标按下气泡,导致依赖性评估并显示/隐藏页面上的其他控件。

我只想要撤消;我认为有另一个重置选项对我的特定用途来说不太令人满意。如果没有其他事情发生在这里,我将不得不使用它。

1 个答案:

答案 0 :(得分:2)

尝试传递给事件处理程序的事件外观上的halt method

this.controlNode = Y.Node.create("<input id='" + id + "' type='radio' name='" + parent.id + "'>");
this.controlNode.on("click", function(e) { e.halt(); });

这将停止事件传播和默认事件行为(单击)。