2010-11-02 96 views
6

我們使用第三方控件套件,該套件具有我們想要自定義的JQuery全局事件ajaxError。我們不想更新這個JS文件,但想以某種方式覆蓋它,以便JQuery不執行此事件。重寫第三方JS

這可能嗎?

編輯:第三方代碼

ajaxError: function (element, eventName, xhr, status) { 
     var prevented = this.trigger(element, eventName, 
      { 
       XMLHttpRequest: xhr, 
       textStatus: status 
      }); 

     if (!prevented) { 
      if (status == 'error' && xhr.status != '0') 
       alert('Error! The requested URL returned ' + xhr.status + ' - ' + xhr.statusText); 
      if (status == 'timeout') 
       alert('Error! Server timeout.'); 
     } 
    } 

我婉抵消從if條件

+0

它是如何綁定的?你可以給你想要取消的代碼? – lonesomeday 2010-11-02 20:14:11

+0

@lonesomeday - 請參閱編輯 – DotnetDude 2010-11-02 20:16:29

回答

-1
public class MyClass: MC 

{ 
    protected override void OnError(..) 
    { 
    //handle error, send error to where ever 
    } 
} 
+4

錯誤的編程語言。 – Quentin 2010-11-02 20:23:36

1

你可能會覆蓋整個方法,但不是唯一的一條語句開始行。

編輯 您正在使用的函數庫是用原型我猜。 只是注意到你正在使用jQuery。因此你可以使用jQuery.fn而不是LibName.prototype。覆蓋它看起來類似於:

jQuery.fn.ajaxError = function(element, eventName, xhr, status) { 
    var prevented = this.trigger(element, eventName, 
    { 
    XMLHttpRequest: xhr, 
    textStatus: status 
    }); 
} 
+1

如何覆蓋JS中的整個方法以及如何處理觸發器調用? – DotnetDude 2010-11-02 20:24:43

+0

我的理解是,fn語法用於爲jquery添加功能(創建插件)。這是否也適用於重寫jquery方法? – DotnetDude 2010-11-02 21:06:35

+0

如果'ajaxError'是在'fn'的上下文中定義的,比如插件,它應該。你嘗試過嗎? – pex 2010-11-03 10:31:50

0

您可以覆蓋任何財產如下:

var thirdParty = { 
     override: function() {     
      alert('this function should have been overridden'); 
     } 
    }; 

    var thirdPartyOriginal = thirdParty.override; 

    thirdParty.override = function() { 
     alert('this function has been overridden'); 
    }; 

    thirdParty.override(); 

    thirdParty.override = thirdPartyOriginal; 

的例子顯示了原始的保留,然後新的代碼執行後。我將它返回到原始狀態。