Magento - opcheckout.js - 在结账时手动调用setAddress()

时间:2012-11-05 16:38:54

标签: javascript magento

我已经根据这个简短的教程添加了PO Box过滤:

http://inchoo.net/ecommerce/magento/prevent-po-boxes-in-shipping-address-field-on-checkout/comment-page-1/#comment-35117

基本上,这只是调用我的控制器,在'street1'和street2'字段上执行preg_match,并在输入PO Box地址时发出警报,否则它只调用shipping.save()并转到下一个步骤

问题是如果用户保存了邮政信箱地址(并且这不是默认地址),当您选择备用地址(使用邮政信箱)时,隐藏的表单字段不会使用所选的更新地址,并且不会调用PO Box验证。

为了解决这个问题,我在更改select元素时触发shipping.setAddress(value):

jQuery("#shipping-address-select").change(function(){
    var value = jQuery("#shipping-address-select option:selected").val();
    shipping.setAddress(value);
});

这几乎完全符合预期,它将地址设置为我所期望的,一切都很美好;但是,这里发生的一个小故障是在调用shipping.setAddress(value)(执行ajax调用)之后,select元素会在我选择实际地址后自动显示“新地址”选项。这纯粹是一个视觉故障,因为使用了正确的地址,但是显示“新地址”会让用户感到困惑。

有没有办法解决这个问题,而无需修改opcheckout.js中的任何内容(Shipping类和setAddress()位所在的位置)?

- 编辑 - 这是Magento Professional - 1.11.1.0

1 个答案:

答案 0 :(得分:3)

虽然肯定不是最佳解决方案,但与此同时我不得不使用以下方式手动更新隐藏的表单字段:

jQuery("#shipping-address-select").on('change',function(){
    var address = jQuery("#shipping-address-select option:selected").html().split(', ');
    jQuery("#shipping\\:street1").val(address[1]);
    jQuery("#shipping\\:street2").val(address[2]);
});

我为这段代码感到骄傲。 /讽刺。