У меня есть Dijit Dialog (jsfiddle), созданный программно. Когда вызывается Dialog Show, я передаю идентификатор для кнопок во время выполнения. Я пытаюсь создать функции события щелчка для выполнения для идентификатора, переданного во время выполнения.
Однако события не выполняются. Я хотел бы знать, как прикрепить функцию к кнопкам диалога.
HTML
<button id="show">Show Dialog</button>
JS
require([
"dijit/form/CheckBox",
"dijit/dijit",
"dijit/form/Textarea",
"dijit/form/FilteringSelect",
"dijit/form/TextBox",
"dijit/form/ValidationTextBox",
"dijit/form/DateTextBox",
"dijit/form/TimeTextBox",
"dijit/form/Button",
"dijit/form/RadioButton",
"dijit/form/Form",
"dijit/_DialogMixin"]);
require([
"dojo/parser",
"dojo/_base/declare",
"dojo/domReady!",
"dojo/ready"],
function (parser, declare, ready, Dialog) {
parser.parse();
dojo.ready(function () {
function showDialog(yesBtnId, noBtnId) {
var dialog = new dijit.Dialog({
title: 'Confirmation',
content: '<table style= "width: 300px;">' +
'<tr>' +
'<th style="text-align:center; padding: 5px" colspan="2"><label>Are You Sure ?</label></th>' +
'</tr>' +
'<tr>' +
'<td style="text-align:center; padding: 5px"><button id=' + yesBtnId + '>Yes</button></td>' +
'<td style="text-align:center;padding: 5px"><button id= ' + noBtnId + '>No</button></td>' +
'</tr>' +
'</table>'
});
dialog.show();
}
var myShowBtn = {
id: "show",
onClick: function (evt) {
showDialog('yesDelete', 'noDelete');
}
};
dojo.query("#show").connect("onclick", myShowBtn.onClick);
var myYesDelete = {
id: "yesDelete",
onClick: function (evt) {
alert('hello its working....');
}
};
dojo.query("#yesDelete").connect("onclick", myYesDelete.onClick);
});
});
Вы пытаетесь добавить обработчик события для элемента, который еще не существует, когда вы его вызываете, поэтому обработчик события на самом деле не связан, потому что в этот момент ему нечего привязывать.
Однако, если вы переместите строку:
dojo.query("#yesDelete").connect("onclick", myYesDelete.onClick);
До функции showDialog()
(поместите его за dialog.show()
), тогда он будет работать, как вы можете видеть в этом обновленном JSFiddle.