Я унаследовал код 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">
У меня серьезные трудности с набором синтаксиса. Помогите мне здесь?
Лучший, Мэтти
var liveaddress = jQuery.LiveAddress(...)
, а затем вы можете сделатьliveaddress.deactivate('addressID')
-- извините за путаницу. :) - person Matt   schedule 08.12.2014