On 07.10.2007 11:15 Uhr, [EMAIL PROTECTED] wrote:

I am uncertain about scope in JavaScript.  I would never declare a
variable inside a block and expect the variable to be available
outside the block, but that rule is a LCD from using many programming
languages.  If JS had an issue, this code should error about accessing
a missing property "nodeValue" from a null object.

This is the actual reason. Even if it works at all (as you explain why it should not) the variable is declared only inside the loop and not available outside of it. Cocoon once had a feature to put non-declared variables into a global scope, but I thought this was somehow protected during method execution. Anyway, this means that you have a local variable inside the loop - and a different global one, conincidentally with the same name, which never gets set. But in that case you really should get an exception since you access the nodeValue property of null.

The code has to change at least (besides possible DOM changes) to:

  var captchaUserEntries = root.getElementsByTagName("captcha");

  var captchaUserEntry;
  // get captcha node
  for (var i = 0; i < captchaUserEntries.getLength(); i++) {
      captchaUserEntry = captchaUserEntries.item(i);
  }

  // get required content
  var captchaUserContent = captchaUserEntry.nodeValue;

Or to avoid the meaningless looping do:

  var captchaUserEntries = root.getElementsByTagName("captcha");

  var captchaUserEntry =
    captchaUserEntries.item(captchaUserEntries.getLength() - 1);

  // get required content
  var captchaUserContent = captchaUserEntry.nodeValue;

(Both examples should have a check for the case there is no captcha element.)

Hope this helps,

Joerg

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to