0

我有一些代码用于创建一个下拉菜单,该菜单会根据检查的内容而变化。从页面分离的 javascript 和 html 工作正常,但是一旦它与 jquery 同时加载,并且所有内容都放入一个对话框中,我会收到一个类似这样的错误

我可以通过我的客户端上的萤火虫看到这个错误,但它似乎没有出现在 jsfiddle 但是当它出现时,下拉菜单不起作用......

document.form1a.damage is undefined
[Break On This Error]   
document.form1a.damage[i].options.length=0;

我已经设法解决了这么多:它是由 jquery 代码的对话框部分引起的,而不是我正在使用的其他 jquery 并且一旦删除对话框,下拉菜单就可以正常工作。我已将所有代码上传到 JsFiddle

提琴手

4

2 回答 2

0

问题是 jsFiddle 将您的代码包装在一个$(window).load函数中,fill_damage该函数在函数中定义了一个变量$(window).load。一旦$(window).load函数完成执行,该fill_damage函数就不再在作用域内,这意味着您不能使用onchange处理程序来引用它。

解决方案是:

  1. 将它包含在您的中$(function) ,并click使用 jQuery(推荐,因为您已经在使用它)或通过更传统的 JavaScript 方法(例如addListener(不推荐,因为您已经在使用 jQuery)将其分配给处理程序。
  2. 或 将您的框架选择更改为noWrap (head)no wrap (body)

我重写了你的小提琴(有很多评论)。你可以在这里看到它:http: //jsfiddle.net/9YTwv/7/

希望这可以帮助。

于 2012-10-08T12:43:49.923 回答
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;

...或继续使用按类名和索引等,而不是使用形式表示法。

更新:

这是一个展示另一种方法的jsfiddle,只需将onchange与jquery绑定并通过它设置选项。注释了一点以显示流程——函数在底部附近:

http://jsfiddle.net/xCMU6/

更新 2:

以这种方式在基本级别管理 id 的一种旧方法是使用公共前缀/后缀。所以你的第一个选择是type-0with damage-0。然后引用另一个你换掉单词(或拆分 - )。

于 2012-05-18T02:12:40.363 回答