由于jquery对话框,javascript未运行
我有一些代码,我正在使用它来创建一个下拉菜单,它根据选中的内容而变化。从页面中分离出来的javascript和html工作得很好,但是一旦它与jquery同时加载,并且所有内容都被放入一个对话框中,我就会收到一个类似这样的错误 我可以通过客户端上的firebug看到这个错误,但它似乎没有出现在JSFIDLE中,但当它出现时,下拉菜单不起作用由于jquery对话框,javascript未运行,javascript,jquery,html,javascript-events,Javascript,Jquery,Html,Javascript Events,我有一些代码,我正在使用它来创建一个下拉菜单,它根据选中的内容而变化。从页面中分离出来的javascript和html工作得很好,但是一旦它与jquery同时加载,并且所有内容都被放入一个对话框中,我就会收到一个类似这样的错误 我可以通过客户端上的firebug看到这个错误,但它似乎没有出现在JSFIDLE中,但当它出现时,下拉菜单不起作用 document.form1a.damage is undefined [Break On This Error] document.form1a.d
document.form1a.damage is undefined
[Break On This Error]
document.form1a.damage[i].options.length=0;
我已经设法解决了很多问题:这是由jquery代码的对话框部分引起的,而不是我正在使用的另一个jquery,而且一旦删除了对话框,下拉菜单就完全可以正常工作。我已将所有我的代码上传到JSFIDLE
执行该代码时,表单为空。jQueryUI对话框将把它的整个html结构移动到它自己的div中(通常在页面的底部),其中包含所有应用的样式、类等 要在JSFIDLE中看到这一点,请将代码加载事件更改为
no wrap(head)
,它位于框架选择之上。你会得到你提到的错误
使用firebug/chrome inspector查看当时的html结构。你有:
<form name="form1a" method="post" id="form1a"></form>
<div dialog1></div>
<div dialog2></div>
<div overlay></div>
。。。或者继续使用by类名和索引等,而不是使用表单表示法
更新:
下面是一个JSFIDLE,它展示了另一种方法,只需将onchange与jquery绑定,并通过jquery设置选项。注释了一点以显示流--函数位于底部附近:
更新2:
在基本级别管理id的一种旧方法是使用公共前缀/后缀。因此,您的第一个选择是
type-0
和damage-0
。然后,为了引用另一个,您交换了单词(或拆分为-)。问题是JSFIDLE正在将您的代码包装在$(窗口)中。load
函数使填充\u损坏
成为$(窗口)中定义的变量。load
函数。一旦$(window).load
函数完成执行,则fill\u damage
函数不再在范围内,这意味着您不能使用onchange
处理程序引用它
解决方法是:
$(函数)
中,并使用jQuery(建议您使用它)或通过更传统的JavaScript方法(如addListener
(不建议您使用jQuery)将其分配给单击处理程序
noWrap(head)
或no wrap(body)
希望这能有所帮助。嗯,我不太明白,嗯,在js fiddle中要求您更改的内容太多了……很抱歉,我对javascript非常陌生,一直需要很多帮助。您指的是什么作为一个解决方案,考虑给自己选择ID并使用:文档.GETelEnMyBid(opest.DeaGe0)。Opth.St==0;在左侧边栏的jsFaldL中,设置为“OnLoad”,意思是等到HTML准备好,然后释放所有的JavaScript,这就是<代码> $(函数({}))已经做的。将其改为<代码>没有包装。(标题)让它看起来就像你只是在
前面放了一个..
。然后它就好像你认为它应该做的那样。作为一种解决方案,它意味着文档的代码行。form1a
是空的,它没有任何名为损坏的元素,因为jquery将所有内部内容移出了它。还有其他选择方法一个元素,比如getElementById
——我会在谷歌上搜索HTML和id/类/选择器的介绍,因为它不在快速回答的范围之内。我了解id/类。代码最初设置为getElementById,但我更改了它,因为我需要两组下拉菜单,我知道我不能有两个相同的id在同一页上..我怎么能有两个下拉菜单而不发出两个确认id
document.getElementById('selectDamage0').options.length = 0;