2017-05-25 155 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

相關問題