我有一些代码,我用它来创建一个下拉菜单,根据检查的内容而改变。从页面分离的javascript和html工作正常,但是一旦它与jquery同时加载,一切都放在一个对话框中,我发现了一个错误,就像这样
我可以通过我的客户端上的firebug看到这个错误,但它似乎没有出现在jsfiddle中但是当它出现时,下拉列表不起作用......
document.form1a.damage is undefined
[Break On This Error]
document.form1a.damage[i].options.length=0;
我已经设法解决了这个问题:它是由jquery代码的对话框部分引起的,而不是我正在使用的其他jquery,并且一旦删除了对话框,下拉菜单就可以正常工作了。我已将所有代码上传到JsFiddle
答案 0 :(得分:0)
执行该代码时,您的表单为空。 Jquery ui对话框将其整个html结构移动到它自己的div(通常在页面底部),包含所有应用的样式,类等。
要在jsfiddle中看到这一点,请将代码加载事件更改为no wrap (head)
,它位于框架选择之上。你会得到你提到的错误。
使用firebug / chrome检查器查看当时的html结构。你有:
<form name="form1a" method="post" id="form1a"></form>
<div dialog1></div>
<div dialog2></div>
<div overlay></div>
作为问题的解决方案,请考虑选择自己的ID并使用:
document.getElementById('selectDamage0').options.length = 0;
...或继续使用by class name和index等,而不是使用表单表示法。
<强>更新强>
这是一个jsfiddle显示另一种方法,只是使用jquery绑定onchange并通过它设置选项。有点评论显示流程 - 功能接近底部:
更新2:
以这种方式在基本级别管理id的旧方法是使用公共前缀/后缀。因此,您的第一个选择是type-0
damage-0
。然后引用另一个你换掉单词(或拆分 - )。
答案 1 :(得分:0)
问题在于jsFiddle将您的代码包装在$(window).load
函数中,这使得fill_damage
函数中定义了$(window).load
变量。 $(window).load
函数执行完毕后,fill_damage
函数不再在范围内,这意味着您无法使用onchange
处理程序来引用它。
解决方法是:
$(function)
和中,使用jQuery将其分配给click
处理程序(建议使用它以后)或通过更传统的JavaScript方法(如addListener
(不推荐,因为你已经在使用jQuery)。noWrap (head)
或no wrap (body)
。我重新写了你的小提琴(有很多评论)。你可以在这里看到它:http://jsfiddle.net/9YTwv/7/
希望这有帮助。