Как отключить SmartyStreets/LiveAddress через событие onclick

Я унаследовал код SmartyStreets/LiveAddress, реализованный в приложении корзины покупок SquirrelCart, и мне нужна помощь в выяснении синтаксиса для отключения проверки SmartyStreets/LiveAddress с помощью события onclick, которое копирует поля платежного адреса в поля адреса доставки.

Особенно для международных адресов (т. е. за пределами США) очень раздражает необходимость проходить процедуру проверки адреса доставки после того, как они уже подтвердили платежный адрес.

В настоящее время у меня есть адреса, инициализированные так:

/* SmartyStreets */
jQuery.LiveAddress(
    {
        key: "18924899",
        invalidMessage: "Not a valid US Postal address.</br>Please correct or certify below.",
        debug: "true",
        addresses: [
            // Squirrelcart billing address
            {
                id:         'Billing',
                street:     '#Bill_Street',
                city:       '#Bill_City',
                state:      '#Bill_State_or_Province',
                zipcode:    '#Bill_Postal_Code',
                country:    '#Bill_Country'
            },
            // Squirrelcart shipping address
            {
                id:         'Shipping',
                street:     '#Ship_Street',
                city:       '#Ship_City',
                state:      '#Ship_State_or_Province',
                zipcode:    '#Ship_Postal_Code',
                country:    '#Ship_Country'
            },
            // Squirrelcart account address
            {
                id:         'Account',
                street:     '#Street',
                city:       '#City',
                state:      '#State_or_Province',
                zipcode:    '#Postal_Code',
                country:    '#Country'
            }
        ],
        autoVerify: false,
        deactivate: 'Shipping'
    }
);

Код HTML, связанный с копированием платежного адреса в адрес доставки:

<p>If your shipping address is the same as your billing address, clicking the 
   "Same as Billing button will copy it into the fields below for you. 
   If your shipping address is different, please type it in the fields below.</p>

<div align="center"><a class="btn btn_same_as_billing" href="#">Same as Billing</a></div>

Соответствующие функции SquirrelCart JavaScript:

/*************************************************************
    Setup various aspects of the store
*************************************************************/
function scStoreSetup() {

    < ... snip ... >

    $$('.btn_same_as_billing').addEvent('click',function(evt) {scAddressCopy(evt);});

    < ... snip ... >

}

/*************************************************************
    Function copies fields from billing to shipping address
*************************************************************/
function scAddressCopy(evt) {
    // prevents the page from jumping position
    evt.stop();

    var form    = document.address_form;
    var billFldId, shipFldId, billFld, shipFld;

    // loop thru fields
    for(x=0; x < form.elements.length; x++) {
        billFldId   = form.elements[x].id;
        billFld     = form.elements[x];

        // if we are on a bill field
        if (billFldId.indexOf('Bill_') != -1) {
            // change id to matching ship field
            shipFldId = billFldId.replace('Bill_','Ship_');

            // grab ship field and set it
            shipFld = document.getElementById(shipFldId);
            if (shipFld) shipFld.value = billFld.value;
        }
    }
}

/*************************************************************
    Handle things specific to address form
*************************************************************/
function addrForm(elem, evt) {
    if (elem.id == 'Bill_State_Other' && evt.type == 'keyup') {
        if (elem.value.length) {
            // set state or province field to 'Other'
            if (document.getElementById('Bill_State_or_Province')) document.getElementById('Bill_State_or_Province').value = 2
        }
    } else if (elem.id == 'Ship_State_Other' && evt.type == 'keyup') {
        if (elem.value.length) {
            // set state or province field to 'Other'
            if (document.getElementById('Ship_State_or_Province')) document.getElementById('Ship_State_or_Province').value = 2
        }
    } else if (elem.id == 'Bill_State_or_Province' && evt.type == 'change') {
        if (document.getElementById('Bill_State_Other')) {
            var stateOther = document.getElementById('Bill_State_Other');
            if (elem.options[elem.selectedIndex].value == '2') {
                stateOther.value = '';
                stateOther.focus();
            } else {
                stateOther.value='';
            }
        }
    } else if (elem.id == 'Ship_State_or_Province' && evt.type == 'change') {
        if (document.getElementById('Ship_State_Other')) {
            var stateOther = document.getElementById('Ship_State_Other');
            if (elem.options[elem.selectedIndex].value == '2') {
                stateOther.value = '';
                stateOther.focus();
            } else {
                stateOther.value='';
            }
        }
    }
}

Похоже, я должен иметь возможность отключать или деактивировать LiveAddress (особенно для международных адресов) с помощью события onclick, такого как, например,

<a class="btn btn_same_as_billing" href="#" onclick="$('form#address_form').deactivate('Shipping');">Same as Billing</a>

где "address_form" - идентификатор формы:

<form id="address_form" class="sc_form" accept-charset="utf-8" name="address_form" action="<?php print $Form_Action?>" method="post">

У меня серьезные трудности с набором синтаксиса. Помогите мне здесь?

Лучший, Мэтти


person Mattie the Hatter    schedule 05.12.2014    source источник
comment
Международные адреса не проходят проверку, если выбранная страна не соответствует значению США. Кроме того, функция деактивации находится в объекте liveaddress, а не в форме. См. smartystreets.com/docs/plugin/functions#deactivate.   -  person Matt    schedule 05.12.2014
comment
В событии onchange для страны выставления счета в нашем раскрывающемся списке LiveAddress действительно деактивируется — только для адреса выставления счета. Однако в событии onclick после копирования платежного адреса в поля адреса доставки LiveAddress не деактивируется, даже если поля платежного адреса, включая страну, успешно скопированы в поля адреса доставки. Похоже, LiveAddress не понимает, что адрес доставки изменился.   -  person Mattie the Hatter    schedule 05.12.2014
comment
И я просмотрел документацию SmartyStreets перед публикацией здесь. На самом деле, вчера я распечатал эту страницу с функциями плагина и перепробовал больше вариантов синтаксиса, чем мне хочется признать, пытаясь заставить это работать. (Кстати, мне бы очень хотелось увидеть конкретные примеры использования плагинов в документации, которые можно было бы использовать и/или модифицировать для подобных ситуаций.) В любом случае, я думаю, что функция деактивации плагина нам подойдет, но, опять же, , У меня проблемы с синтаксисом. Попробуйте еще раз, пожалуйста? Я с нетерпением жду ответа от вас! Лучший, Мэтти   -  person Mattie the Hatter    schedule 05.12.2014
comment
Ты прав. Если поля изменяются с помощью скрипта, маловероятно, что событие изменения срабатывает, поскольку браузеры срабатывают только тогда, когда пользователь покидает поле. Вероятно, необходимо вызвать событие изменения для поля после изменения его значения программным путем.   -  person Matt    schedule 05.12.2014
comment
Итак, как вы думаете, могу ли я деактивировать проверку SmartyStreets с помощью события onclick, и если да, то какой синтаксис следует использовать?   -  person Mattie the Hatter    schedule 05.12.2014
comment
Что-то вроде этого, может быть? onclick=$('form#address_form').deactivate('Доставка');   -  person Mattie the Hatter    schedule 05.12.2014
comment
Или мы могли бы добавить в код JavaScript некоторый код, который копирует поля выставления счетов в поля доставки, чтобы запустить что-то в код SmartyStreets/LiveAddress?   -  person Mattie the Hatter    schedule 05.12.2014
comment
Что ты думаешь, Мэтт?   -  person Mattie the Hatter    schedule 08.12.2014
comment
Deactivate не является методом в форме #address-form; вы должны вызвать его из объекта liveaddress. Вот почему это не работает.   -  person Matt    schedule 08.12.2014
comment
Синтаксис интеграции в самом верху моего первого поста неверен? (Обратите внимание, что у меня есть деактивация: «Доставка».) Спасибо! Я с нетерпением жду ответа от вас.   -  person Mattie the Hatter    schedule 08.12.2014
comment
Что-то вроде var liveaddress = jQuery.LiveAddress(...), а затем вы можете сделать liveaddress.deactivate('addressID')-- извините за путаницу. :)   -  person Matt    schedule 08.12.2014