2013-11-13 2 views
0

У меня есть клиентский скрипт для моего элемента управления .NET. Сценарий перехватывает все элементы: checkbox для запуска события с именем OnOptionItemSelected.JS Hooking Custom Events

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

ваш код не является достаточно ясным. он не возвращает значение. пожалуйста, уточните. – Guilherme

ответ

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

По какой-то причине я не могу заставить ваш пример работать. http://jsfiddle.net/KC5RH/ – BlueChameleon

+0

вам понадобится «повторная проверка», которая отключит события изменения и снова привяжет onOptionItemSelected после загрузки элемента. – Guilherme

+0

проверить это: http://jsfiddle.net/KC5RH/2/ – Guilherme

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'); }); 

Единственное, что я не могу понять, как получить «это» быть флажок в обработчиках событий CheckBoxClicked. В настоящее время он настроен на функцию ControlClientSide.

Смотрите пример: http://jsfiddle.net/KC5RH/3/