0

我有 HTML 代码,它从表单调用 javascript 函数,使用:

<form name="f" id="f" ...>
  <input name="myField" onchange="doFunct(f.myField.value,f.yourField);" />
  <input name="yourfield" onchange="doFunct(f.yourField.value,f.anotherField);" />
...

在 JavaScript 代码中:

function doFunct(field,dest){
    // do something with field
    dest.value = field;
    // see if the dest has a change field
    if (dest.onchange !== null) {
        //we have an onchange function, so let's do it!
        dest.onchange();
    }
}

这在 Safari、Opera 和 Chrome 中运行良好。它在 FireFox 中失败并出现错误:

错误:dest.onchange 不是函数

有关如何在 FireFox 中从 javascript 执行“dest.onchange()”的任何建议?

我需要这种能力来级联对输入表单中字段的更改。

4

2 回答 2

0

从更多的研究中可以看出,在我的 O'Reilly JavaScript Pocket Reference 中,我发现有一段说:

null和未定义

JavaScript 关键字null是一个特殊的值,表示“没有值”。如果变量包含null,则您知道它不包含任何类型的有效值。JavaScript 中还有另一个特殊值:未定义值。这是当您使用未声明或未初始化的变量或使用不存在的对象属性时返回的值。 该值没有 JavaScript 关键字。

在使用 alert(dest.onchange) 进行一些测试后,我发现 Firefox 并没有抱怨每次调用,而是dest.onchange()抱怨那些错误(未定义)。显然(Grrrr!)Firefox 没有收到备忘录:[此值没有 JavaScript 关键字。]

如果我更改我的代码以进行测试,dest.onchange !== undefined那么 Firefox 很高兴,但 Safari、Opera 和 Chrome 在测试中失败了。如果我如下更改代码,它可以在所有四个浏览器中运行。

if ( (dest.onchange !== null)                // test for safari, chrome, opera
     && (dest.onchange !== undefined) ) {    // test for firefox
    //we have an onchange function, so let's do it!
    dest.onchange();
}

而且我花了 8 个小时试图弄清楚为什么 Firefox 不能正常运行。

于 2010-08-28T12:22:15.853 回答
0

要执行事件,不要在其上添加“on”前缀,只需运行dest.change();

于 2010-08-28T09:12:58.537 回答