2010-08-09 40 views
4

我有以下的加價:如何將一些jQuery附加到已存在的函數?

<dt> 

     <input id="p_method_checkmo" value="checkmo" type="radio" name="payment[method]" title="Check/Money order" onclick="payment.switchMethod('checkmo')" class="radio" /> 
     <label for="p_method_checkmo">Check/Money order </label> 
</dt> 
    <dt> 
     <input id="p_method_ccsave" value="ccsave" type="radio" name="payment[method]" title="Credit Card (saved)" onclick="payment.switchMethod('ccsave')" class="radio" /> 
     <label for="p_method_ccsave">Credit Card (saved) </label> 
</dt> 

我需要一些絆住到jQuery的點擊(或改變)事件。經過大量調試後,我發現內聯onclick事件是我嘗試使用的超越規則和jQuery選擇器。有沒有什麼辦法可以讓一些jQuery在運行該方法(payment.switchMethod)時運行?我想過使用preventDefault()來停止文檔準備好的點擊事件,但我不確定這是一個好主意,還是關於事情的最佳方式。

I CAN NOT不幸的是,以任何方式編輯標記。

任何意見是大規模讚賞。我附上的jQuery以供參考:

// Check for payment selection. Upon selection mark it as 'hitpayment' in db 
jQuery("input[name=payment\\[method\\]]:radio").change(function(){ 
    alert('hello'); 
    var cartPalPayment = {}; 

    cartPalPayment['user_id'] = '<?=$_SESSION['user_id']?>'; 
    cartPalPayment['referer'] = '<?=$_SESSION['referer']?>'; 
    cartPalPayment['license_key'] = cartPalLicenseKey; 

    jQuery.ajax({ 
      url: 'integration/magento1.4/set_payment.php', 
     cache: false, 
      dataType: 'jsonp', 
     data: cartPalPayment 
     }); 
}); 
+0

邁克,我認爲這是不可能刪除onclick =「payment.switchMethod('ccsave')」??然後把這個處理移動到你的jquery方法中(需要的地方) – 2010-08-09 09:31:24

+0

他說無法編輯標記是不可能的,他也用粗體顯示 – amr 2010-08-09 09:33:33

+1

嘗試'.removeAttr('onclick');' – Reigel 2010-08-09 09:41:49

回答

3

好吧,聽起來你也需要運行原始函數。剛換出(重新定義)的payment.switchMethod功能與你自己的,從你的新函數中調用它:

var evilFunction = payment.switchMethod; 
// Ninja-swap payment.switchMethod() with your own. 
payment.switchMethod = function(evilArgs) { 
    // Do whatever you want here 
    alert("Got your nose"); 

    // Call original function 
    evilFunction(evilArgs); 
}; 

只要確保運行文檔加載以上(或以後的任何時間payment.switchMethod定義)。您正在有效地將自己的代碼注入payment.switchMethod,因此您甚至不需要將事件偵聽器附加到該元素。

+0

我可以吻你,像魅力一樣工作 – Mike 2010-08-09 13:41:52

1

我沒有ide如果這將工作,但你可以嘗試。

jQuery("input[name=payment\\[method\\]]:radio").unbind('click');