In order to control the input format in the ZIP code field in the dynamic address fields provided by the Address Field module (I use it in Drupal Commerce) I need to add the attributes onKeyUp
and onBlur
to this field. My plan is to use Javascript to manage the formatting, but I need to add the above attributes first. How do I do that? I imagine I should use hook_form_alter
in my template.php, but I could need a pointer on how to do it.
if($form['#id'] === "edit-customer-profile-billing-commerce-customer-address-und-0-postal-code"){ dsm($form); // devel message does not show up in the checkout page in question $form['#attributes']['onBlur'] = '(this)'; }
EDITED: I have now managed to add the attributes this way:
function mytheme_form_alter(&$form, &$form_state, $form_id) { if($form_id === "commerce_checkout_form_checkout"){ // Merge new attributes with existing ones. $form['customer_profile_billing']['commerce_customer_address']['und']['0']['locality_block']['postal_code']['#attributes'] = array( 'onBlur' => 'setZip(this)', 'onKeyUp' => 'setLimit(this,5)', ); $form['customer_profile_shipping']['commerce_customer_address']['und']['0']['locality_block']['postal_code']['#attributes'] = array( 'onBlur' => 'setZip(this)', 'onKeyUp' => 'setLimit(this,5)', ); } }
And this is the js script (I found it here):
(function($) { $(document).ready(function(){ 'use strict'; var setZip, setLimit; console.log('outside'); function setZip(theField){ console.log('setzip'); var num = theField.value.replace(/D/g,""); theField.value = num.substr(0,3)+" "+num.substr(2); } function setLimit(theField, maxDigit){ console.log('setlimit'); var num = theField.value.replace(/D/g,""); if(num>maxDigit){ theField.value = theField.value.substr(0,maxDigit); } } }); })(jQuery);
The problem now is that I get a javascript reference error like this:
Uncaught ReferenceError: setZip is not defined at HTMLInputElement.onblur
I suspect this has something to do with the scope, so I have tried to place the js script with the setLimit and setZip functions in the header, in the body and in the footer, with the same error message. I also tried to remove the $(document).ready(function()
… but the reference error reamins.
Any ideas?