如何将一些jQuery附加到已存在的函数中?

时间:2010-08-09 09:28:53

标签: jquery jquery-selectors

我有以下标记:

    <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选择器。有没有什么办法可以在运行该方法(payment.switchMethod)时插入一些jQuery来运行?我想过使用preventDefault()来停止文档就绪的click事件,但我不确定这是不是一个好主意,也不是最好的解决方法。

不幸的是,我不能以任何方式编辑标记。

任何建议都受到了广泛的赞赏。我在下面附上了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
        });
});

2 个答案:

答案 0 :(得分: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,因此您甚至不需要将事件侦听器附加到元素。

答案 1 :(得分:1)

我不知道这是否有效,但你可以试试。

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