我有一个 HTML 文档 ( here ),它为专辑中的歌曲集合创建一个基于 iframe 的媒体播放器(为简单起见,我只是使用字母在 mymusic 数组中定义这些专辑和歌曲)。
重点关注前 3 个 iframe,我设置用户交互的方式是使用 Javascript 生成可用专辑和歌曲形式的 HTML,并将它们写入正文中的 iframe。如果运行它并在 Albums 菜单中进行选择,您将看到 Songs 菜单中的选项与 mymusic
数组相对应,所以这有效。
但是,当我选择一首歌曲时,应使用歌曲中的onchange
事件调用函数nowplaying(trackindex,albumindex)
表单,与使用 showinitial()
生成的表单相同...但该函数不会被调用。
我已经排除了 nowplaying
本身的编码作为原因,因为即使我将 nowplaying
更改为 alert("hello")
,它不会被调用。所以这让我认为问题出在“anything”中的 onchange
属性上,但我看不到问题所在。我的编码方式与以前没有什么不同,而且运行得很好,那么为什么这个不起作用呢?
任何帮助将不胜感激!
最佳答案
Firebug 是你的 friend ......
i is not defined
function onchange(event) { parent.nowplaying(this.SelectedIndex, i); }(change )
正在调用 onchange,但在调用 nowplaying
时未定义 i
。
这是这一行的结果:
p+="<html><head></head><body><form><select onchange='parent.nowplaying(this.SelectedIndex,i);' size='";
当它应该将其作为变量附加时,它在字符串中使用“i”:
p+="<html><head></head><body><form><select onchange='parent.nowplaying(this.SelectedIndex," + i + ");' size='";
澄清一下,i
是在调用 anything(i)
时定义的,但您并没有将 i
写入代码中,只是字母“我”。当调用 nowplaying(this.SelectedIndex,i)
时,i
不再定义,因为您不在 anything()
内部不再起作用了。当您将 html 附加到 p
时,您需要展开 i
,这样值就在那里,而不是变量 i
。
关于javascript - onchange 属性不会调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1799936/