OK, thanks! I appreciate everyone's quick responses on this one. You guys rock! Dave -----Original Message----- From: development-bounces@drupal.org [mailto:development-bounces@drupal.org] On Behalf Of Steven Jones Sent: Thursday, December 17, 2009 3:59 PM To: development@drupal.org Subject: Re: [development] Weird Javascript behavior after form_set_error on Drupal forms David, It's fairly standard practice to pop adding your js settings in a simple function, and to use a simple static variable in that function to ensure that the settings are only added once. Then you can then call the function as many times as you want on a page load. On Thursday, December 17, 2009, David Thibault <dthibault@esperion.com> wrote:
OK, this worked:
Add_js_css.inc (a file with all the Drupal_add_css and Drupal_add_js calls in it).
In hook_form_alter I did this:
If ($node->type == 'purchase_order') {
$form['#pre_render'][] = 'load_js_css';
}
In load_js_css() I did this:
require_once('add_js_css.inc.');
return $form;
And that worked.
Thanks, Scott!
Dave
From: development-bounces@drupal.org [mailto:development-bounces@drupal.org] On Behalf Of David Thibault Sent: Thursday, December 17, 2009 1:41 PM To: development@drupal.org Subject: Re: [development] Weird Javascript behavior after form_set_error on Drupal forms
That almost works. For some reason pre_render gets called twice and then it doubles up the calls to the Drupal_add_js (.settings) lines like this:
drupal_add_js(
array('ldap_get_contact_details' =>
array("json_url" => $json_url)), 'setting');
My ajax calls use those settings to find the JSON urls to call. If it gets called twice, then the settings array on the javascript side gets doubled up and breaks. So then I moved those back to form alter (so they'd get called once) and left the other drupal_add_js and Drupal_add_css lines in the special my_load_js function. Basically right now it's stuck at putting them in form_alter and they don't get called after the form_set_error returns, or put them in as pre_render options, and somehow that gets called twice in one page load. I put a watchdog statement in my_load_js so that I could verify, and it does, in fact, get called twice per page load.
Thoughts?
Dave
From: development-bounces@drupal.org [mailto:development-bounces@drupal.org] On Behalf Of Scott Reynolds Sent: Thursday, December 17, 2009 1:14 PM To: development@drupal.org Subject: Re: [development] Weird Javascript behavior after form_set_error on Drupal forms
This is because on form error the form comes out of the cache table and skips fetching the form and all its _alter's. The 'best' practice I have found is to use a #pre_render function to drupal_add_js(). pre_render's are called always.
<?php
function my_form_alter() {
// add my elements
$form['#pre_render'][] = 'my_load_js';
}
?>
<?php
function my_load_js($form) {
drupal_add_js();
return $form;
}
?>
-- Scott Reynolds
-- Regards Steven Jones ComputerMinds ltd - Perfect Drupal Websites Phone : 024 7666 7277 Mobile : 07702 131 576 Twitter : darthsteven http://www.computerminds.co.uk