Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由于jquery对话框,javascript未运行_Javascript_Jquery_Html_Javascript Events - Fatal编程技术网

由于jquery对话框,javascript未运行

由于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

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

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

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;