100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > html自动调用js函数 使用HTML按钮调用JavaScript函数

html自动调用js函数 使用HTML按钮调用JavaScript函数

时间:2019-06-19 05:06:51

相关推荐

html自动调用js函数 使用HTML按钮调用JavaScript函数

使用HTML按钮调用JavaScript函数

我正在尝试使用HTML按钮来调用JavaScript函数。

这是代码:

但它似乎无法正常工作。 有一个更好的方法吗?

这是链接:[/bendel/toolscalculators.html]点击左下方的容量标签。 如果值未更改,则按钮应生成警报,如果输入值,则应生成图表。

fmz asked -03-18T13:23:21Z

9个解决方案

289 votes

有几种方法可以使用HTML / DOM处理事件。 没有真正的正确或错误的方式,但不同的方式在不同的情况下是有用的。

1:在HTML中定义它:

2:在Javascript中将事件添加到DOM属性中:

//- Using a function pointer:

document.getElementById("clickMe").onclick = doFunction;

//- Using an anonymous function:

document.getElementById("clickMe").onclick = function () { alert('hello!'); };

3:并且使用Javascript将事件附加到事件处理程序:

var el = document.getElementById("clickMe");

if (el.addEventListener)

el.addEventListener("click", doFunction, false);

else if (el.attachEvent)

el.attachEvent('onclick', doFunction);

第二种和第三种方法都允许内联/匿名函数,并且必须在从文档中解析元素之后声明它们。 第一种方法不是有效的XHTML,因为onclick属性不在XHTML规范中。

第1和第2种方法是互斥的,意味着使用一个(第二个)将覆盖另一个(第一个)。 第3种方法允许您将同样多的函数附加到同一个事件处理程序,即使已经使用了第1或第2种方法。

最有可能的是,问题出在您的document.all功能中。 访问链接并运行脚本后,运行CapacityChart()函数并打开两个弹出窗口(根据脚本关闭一个)。 你有以下几行:

CapacityWindow.document.write(s);

请尝试以下方法:

CapacityWindow.document.open("text/html");

CapacityWindow.document.write(s);

CapacityWindow.document.close();

编辑

当我看到你的代码时,我以为你是专门为IE编写的。 正如其他人提到的那样,你需要用document.getElementById替换对document.all的引用。但是,你仍然需要在此之后修复脚本,所以我建议首先让它在IE中工作,因为你将代码改为 跨浏览器工作可能会导致更多的混乱。 一旦它在IE中工作,当你更新代码时,更容易判断它是否在其他浏览器中工作。

Andy E answered -03-18T13:24:32Z

25 votes

我会说以不突兀的方式添加javascript会更好...

如果使用jQuery你可以做类似的事情:

$(document).ready(function(){

$('#MyButton').click(function(){

CapacityChart();

});

});

Paul answered -03-18T13:25:05Z

6 votes

您的HTML以及从按钮调用该函数的方式看起来是正确的。

问题似乎出现在document.all函数中。 我在Firefox 3.5的控制台中收到此错误:bendelcorp.js第759行的“document.all is undefined”。

编辑:

看起来像document.all是IE浏览器的东西,是访问DOM的非标准方式。 如果您使用document.getElementById(),它应该可以工作。 示例:document.getElementById("RUnits").value而不是document.all.Capacity.RUnits.value

Jeff answered -03-18T13:25:49Z

3 votes

这看起来很正确。 我猜你用不同的名字或在按钮不可见的上下文中定义了你的函数。 请添加一些代码

jitter answered -03-18T13:26:17Z

1 votes

您遇到的一个主要问题是您使用浏览器嗅探是没有充分理由的:

if(navigator.appName == 'Netscape')

{

vesdiameter = document.forms['Volume'].elements['VesDiameter'].value;

// more stuff snipped

}

else

{

vesdiameter = eval(document.all.Volume.VesDiameter.value);

// more stuff snipped

}

我在Chrome上,所以getElementById将不会是name. Chrome是否支持input? 也许,但话说再说也许不是。 那么其他浏览器呢?

getElementById分支上的代码版本应该可以在从1996年开始返回Netscape Navigator 2的任何浏览器上运行,所以你应该坚持使用它...除了它不起作用(或者不保证 因为您没有在input元素上指定name属性,因此它们不会作为命名元素添加到窗体的elements数组中:

给他们一个名字并使用getElementById阵列,或(更好)使用

var vesdiameter = document.getElementById("VesDiameter").value;

它适用于所有现代浏览器 - 无需分支。 为了安全起见,请检查大于或等于4的浏览器版本,并检查getElementById支持:

if (document.getElementById) { // NB: no brackets; we're testing for existence of the method, not executing it

// do stuff...

}

您可能也想验证您的输入; 就像是

var vesdiameter = parseFloat(document.getElementById("VesDiameter").value);

if (isNaN(vesdiameter)) {

alert("Diameter should be numeric");

return;

}

有助于。

NickFitz answered -03-18T13:27:29Z

1 votes

您的代码在此行上失败:

var RUnits = Math.abs(document.all.Capacity.RUnits.value);

我试着用萤火虫踩它然后在那里失败了。 这应该可以帮助你找出问题所在。

你引用了jquery。 你也可以在所有这些功能中使用它。 它会显着清理你的代码。

Patricia answered -03-18T13:28:12Z

1 votes

您知道,当您调用该函数时,分号(;)不应该在按钮中。

所以它应该是这样的:οnclick="CapacityChart()"

那一切都应该工作:)

jacki answered -03-18T13:28:56Z

0 votes

我有一个智能的函数调用支持按钮代码:

Intelligent Button:

Note: Try pressing a key after clicking.

Ahhhh

textmonster404 answered -03-18T13:29:24Z

-2 votes

愚蠢的方式:

οnclick="javascript:CapacityChart();"

您应该阅读有关离散javascript的信息,并使用框架绑定方法将回调绑定到dom事件。

erenon answered -03-18T13:29:58Z

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。