JS Hooking Custom Events

0

У меня есть клиентский скрипт для моего элемента управления.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 ????
  • 0
    ваш код недостаточно понятен это не возвращает значение. пожалуйста, будьте более ясны
Теги:
events

2 ответа

0

Я действительно нашел ответ, который лучше соответствует моим потребностям:

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/

0

Я предполагаю, что 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();
}
  • 0
    По какой-то причине я не могу заставить ваш пример работать. jsfiddle.net/KC5RH
  • 0
    вам понадобится «перепривязка», которая отключит события изменения и снова свяжет onOptionItemSelected после загрузки элемента.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню