2

タイトルが正しく表現されていない可能性があります。基本的に、私はカスタム イベント ハンドラーでテストしており、それらが動作するところまで到達しましたが、イベント ハンドラーのthisは、イベントをトリガーした項目ではなく、ControlClientSide を指しています。

以下のコードはすべてを明確にします。

function ControlClientSide()
{    
    this.CheckBoxClicked = function(e) { }        
    this.Configure = function() {        
        $('#checkBox100').change(function(e) { $(this).trigger("CheckBoxClicked"); }.bind(this));                
    };
    this.Configure();
};

var x = new ControlClientSide();
$(x).on("CheckBoxClicked", function(e) { alert( /* $(this).val() + */ ' Hi'); })
    .on("CheckBoxClicked", function(e) { alert( /* $(this).val() + */ ' Hi2'); });

2 つのハンドラーで、実際のチェックボックス項目を指すようにしています。現在、ControlClientSide を指しています。誰かが私が欠けているものを提案できますか?

次の JSFIDDLE を参照してください: http://jsfiddle.net/KC5RH/3/

4

2 に答える 2

0

でオブジェクトに明示的にバインドしています.bind(this)。また、DOM ノードではなく、イベントをリッスンするようにオブジェクトを設定しています。bind(this)そのため、その部分を削除する必要があります。

次に、trigger代わりにを使用triggerHandlerして、イベントを DOM にバブルアップさせます。これにより、委譲を使用してキャプチャできます。

function ControlClientSide()
{    
    this.CheckBoxClicked = function() { }        
    this.Configure = function() {        
        $('#checkBox100').change(function() {
            $(this).trigger("CheckBoxClicked"); 
        });   
    };
    this.Configure();
};

var x = new ControlClientSide();
$(document).on("CheckBoxClicked", "input", function() { console.log(this); alert(this.id); })

http://jsfiddle.net/KC5RH/9/

于 2013-11-13T18:23:21.087 に答える