2017-05-25 156 views
1

我可以通过点击事件创建Dijit单选按钮,并且它们工作正常。但是,当再次点击相同的按钮(即当前选中的按钮)时,点击事件不会触发。我该如何做到这一点,以便当再次单击当前选中的单选按钮时可以使用事件回调? 。如果再次点击同一个按钮,Javascript Dojo/Dijit单选按钮点击事件将不会触发

我使用的dijit /表格/单选按钮”

我在语法上创建的单选按钮亲如下:

var aRadioButton = new RadioButton({ 
    checked: someBooleanValue, 
    value: someValue, 
    name: someName, 
    onClick: lang.hitch(this, buttonCallback) // This works, except for when same button is clicked. 
}); 
+0

你不能没有覆盖'_onClick' [方法](https://github.com/dojo/更改此行为dijit/blob/master/form/_RadioButtonMixin.js#L58),因为它被设计用于在收音机被选中或禁用时抑制'onClick'事件 – barbsan

回答

1

道场默认情况下不支持此行为的RadioButton

替代文件_RadioButtonMixin.js中函数_onClick的猴子路径,您可以直接在dom本身上直接添加事件侦听器,在此示例中,我使用focusNodeRadioButton

活生生的例子:

https://jsfiddle.net/gibbok/kwdy5gqc/

require([ 
    "dojo/on", 
    "dojo/parser", 
    "dijit/form/RadioButton", 
    "dijit/form/Button", // used for example purpose 
    "dojo/domReady!" 
], function(on, parser, RadioButton) { 
    var radioOne = new RadioButton({ 
    checked: true, 
    value: "tea", 
    name: "drink" 
    }, "radioOne"); 

    var radioTwo = new RadioButton({ 
    checked: false, 
    value: "coffee", 
    name: "drink" 
    }, "radioTwo"); 

    var signal = on(radioOne.focusNode, "click", function(event) { 
    // this code will fire when domNode is clicked 
    alert('click on input tea'); 
    }); 

    var signal = on(radioTwo.focusNode, "click", function(event) { 
    // this code will fire when domNode is clicked 
    alert('click on input cafee'); 
    }); 


    parser.parse(); 
}); 

<form id="myform"> 
    <input type="radio" name="drink" id="radioOne" checked value="tea" /> 
    <label for="radioOne">Tea</label> 
    <br /> 
    <input type="radio" name="drink" id="radioTwo" value="coffee" /> 
    <label for="radioTwo">Coffee</label> 
    <br /> 

    <button data-dojo-type="dijit/form/Button" type="button"> 
    Show form submit value 
    <script type="dojo/on" data-dojo-event="click"> 
     require(["dojo/dom"], function(dom){ with(dom.byId('myform'))with(elements[0])with(elements[checked?0:1])alert(name+'='+value); return false; }); 
    </script> 
    </button> 
</form> 
+0

您是否尝试过将这个外部解决方案分配给'domNode'?我看不到差异 - 检查无线电时事件会受到抑制。 – barbsan

+0

@barbsan感谢您的评论,请看看我的编辑:) – GibboK

+1

对,现在它工作。而不是长'radioOne.domNode.childNodes [0]'你也可以使用'radioOne.focusNode' :) – barbsan

相关问题