2011-11-29 47 views
0

我正在使用一些使用microsoft ajax工具包編寫的控件。我想用jQuery在這些控件中觸發一個事件。我希望它應該像從jQuery觸發任何事件一樣簡單,但它似乎並沒有工作。下面是示例代碼..如何從jQuery調用Ajax控件事件

Ajax控件

/// <reference name="MicrosoftAjax.js"/> 

Type.registerNamespace("MyNameSpace"); 

MyNameSpace.AjaxUserControl = function(element) { 
    MyNameSpace.AjaxUserControl.initializeBase(this, [element]); 
} 

MyNameSpace.AjaxUserControl.prototype = { 
    initialize: function() { 
    MyNameSpace.AjaxUserControl.callBaseMethod(this, 'initialize'); 
    } 
}, 

dispose: function() { 

    MyNameSpace.AjaxUserControl.callBaseMethod(this, 'dispose'); 
}, 

_onChange: function(evt) { 
    alert('On Change event.'); 
    }, 
} 
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded(); 

jQuery代碼:

var myJqueryControl = (function ($, AjaxControl) { 
    $(document).ready(function(){ 
    var ajaxEventProxy = Function.createDelegate(AjaxControl, AjaxControl._onChange); 
    $("#JqueryCommandButton").click(ajaxEventProxy); 
} (jQuery,MyNameSpace.AjaxUserControl)); 

它不工作,當按鈕被點擊我看不到裏面的onchange警報消息。將不勝感激關於如何使其工作的任何指導。

感謝 CSC

+0

停止使用微軟的lame ajax庫和ajax控件工具包! :) – gillyb

+0

我想..我不喜歡它,但必須支持舊代碼:( – CSC

回答

0

,如果你跟着JQuery widget pattern它的工作容易得多。因爲周圍的元素的AJAX控制包裹,很像小部件呢,你可以更輕鬆地通過使用init方法寫一些設置整合兩家,:

_init: function() { 
    //store a control reference within the widget 
    this._control = $find(this.element.attr("id")); 
} 

然後,在你的小部件,您可以參考通過this._control進行控制。

如果你不能切換模型,解決這個問題的方式不是直接引用類型,而是實例...而不是將參考MyNameSpace.AjaxUserControl傳遞給構造函數,傳遞一個實例,然後你可以做:

instance._onchange(); 

要調用該事件。

+0

感謝Brian Brian。非常翔實,我會嘗試你的建議,再次感謝。 – CSC