Я создаю JQuery плагин для присоединения событий и обработчиков событий во время выполнения:Использование замыкания в JQuery
HTML-:
<table id="digitalInputsTable">
<thead>
<th>Name</th>
<th>Value</th>
<th>State</th>
<th>Enabled</th>
<th>Polarity</th>
<th>Ignore Reset</th>
</thead>
<tbody>
<tr>
<td>
<span class="">Name1</span>
</td>
<td>
<span class="">0</span>
</td>
<td>
<span class="">Normal</span>
</td>
<td>
<input type="checkbox" value="true" class="" jqmon="0" jqreg="0" id="digitalInputsTable_checkbox_03">
</td>
<td>
<select class="" jqmon="0" jqreg="0" id="digitalInputsTable_select_04">
<option value="0=Alarm">0=Alarm</option>
<option value="1=Alarm">1=Alarm</option>
</select>
</td>
<td>
<input type="checkbox" value="true" class="" jqmon="0" jqreg="0" id="digitalInputsTable_checkbox_05">
</td>
</tr>
</tbody>
Структура данных:
$("#digitalInputsTable").bindEvents({
parentControl: "digitalInputsTable",
controls: [
{
id: undefined,
name: "checkbox",
idStartsWith: "digitalInputsTable_checkbox_",
event: "click",
callbackHandler: "checkboxCallback"
},
{
id: undefined,
name: "checkbox",
idStartsWith: "digitalInputsTable_checkbox_",
event: "blur",
callbackHandler: "blurCallback"
},
{
id: undefined,
name: "select",
idStartsWith: "digitalInputsTable_select_",
event: "change",
callbackHandler: "selectCallback"
}
]
});
Плагин:
$.fn.bindEvents = function(options) {
for(var i = 0; i < options.controls.length; i++) {
var control = options.controls[i];
switch(control.name) {
case "checkbox":
control.name = ":checkbox";
break;
}
if(control.id) {
// find control by ID.
// Attach event to the control.
}
else if(control.idStartsWith) {
$("#" + options.parentControl).find(control.name + "[id^=" + control.idStartsWith + "]")
.bind(control.event, function(e) {
function(ctrl) {
eval(ctrl.callbackHandler + "();");
};
}(control));
}
};
};
Проблема:
Когда я устанавливаю флажок, я не могу вызвать функцию обратного вызова checkboxCallback. Может быть, я неправильно использую закрытие. Пожалуйста, порекомендуйте.
, пожалуйста, добавьте немного больше информации: какой эффект имеет 'control.name =": checkbox "' have? Из его взглядов вы пытаетесь что-то похожее на '$ ('*: checkbox')', который ничего не вернет, вместо этого я бы пошел '$ ('* [type = \" checkbox \ "]')' - что бы работа с элементами с аргументом «тип» присутствует (входы) – mschr
На самом деле это то, что я пытаюсь сделать: $ («# parentTableID» .find («: checkbox»). bind («click», function() {. ..}); Флажок: здесь действует как псевдоселектор –
ah my bad; '$ (': checkbox') эквивалентно $ ('[type = checkbox]')', но тогда - будет ли [type = checkbox] [id^= "someidstart"] работать? Я бы удостоверился, что на самом деле есть набор узлов для вызова цепочки .bind на – mschr