У меня есть клиентский скрипт для моего элемента управления.NET. Сценарий перехватывает все элементы: checkbox, чтобы вызвать событие OnOptionItemSelected.
function ControlScript() {
this.OnOptionItemSelected = function (e) { /* do something */ }
this.Configure = function () {
// hook change event of items in the input control
$('#' + this.ControlID).find(":radio, :checkbox")
.on("change", this, this.OnOptionItemSelected);
}
}
(Некоторые фрагменты кода удалены)
В другом месте на странице я получаю скрипт на стороне клиента для конкретного элемента управления и должен подключить событие OnOptionItemSelected. Как я могу связать это событие?
var script = GetScriptForControl(ID);
if (script)
// hook script.OnOptionItemSelected to a custom function ????
Я действительно нашел ответ, который лучше соответствует моим потребностям:
function ControlClientSide()
{
this.CheckBoxClicked = function() { }
this.Configure = function() {
$('#checkBox100').change(function() { $(this).triggerHandler("CheckBoxClicked"); }.bind(this));
};
this.Configure();
};
var x = new ControlClientSide();
$(x).on("CheckBoxClicked", function() { alert( this.constructor.name + ' Hi'); })
.on("CheckBoxClicked", function() { alert( this.constructor.name + ' Hi2'); });
Единственное, что я не могу понять, - это установить флажок "this" в обработчики событий CheckBoxClicked. В настоящее время он настроен на функцию ControlClientSide.
Пример: http://jsfiddle.net/KC5RH/3/
Я предполагаю, что GetScriptForControl возвращает экземпляр ControlScript. Так что я бы сделал:
if(script) {
oldOptionItemSelected = script.OnOptionItemSelected
script.OnOptionItemSelected = function(ev) {
/* before OptionItemSelected code HERE */
oldOptionItemSelected.call(script,ev);
/* after OptionItemSelected code HERE */
};
/* rebind the events */
script.Configure();
}