1

この短いチュートリアルに従って、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 を実行し、私書箱の住所が入力された場合は警告を発し、それ以外の場合は shipping.save() を呼び出して次のステップに進みます。

問題は、ユーザーが私書箱の住所を保存している場合 (これはデフォルトの住所ではありません)、別の住所 (私書箱を含む) を選択すると、非表示のフォーム フィールドが選択した住所で更新されず、私書箱の検証は呼び出されません。

これを改善するために、選択要素が変更されたときに 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

4

1 に答える 1

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]);
});

私はこのコードをとても誇りに思っています。/皮肉。

于 2012-11-07T23:26:42.823 に答える