我有以下标记:
<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
});
});
答案 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');