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 ????
4

2 回答 2

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();
}
于 2013-11-13T16:03:38.053 回答
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/

于 2013-11-13T17:59:20.283 回答