Javascript 显示时的奇怪行为|显示:无元素
我有一个自定义的模态对话,它由一个简单的div和一些css组成。有2个按钮(确定、取消)按钮。取消按钮总是相同的;它通过Javascript 显示时的奇怪行为|显示:无元素,javascript,jquery,Javascript,Jquery,我有一个自定义的模态对话,它由一个简单的div和一些css组成。有2个按钮(确定、取消)按钮。取消按钮总是相同的;它通过onclick=“$('#div').css('display','none')”(注意:模态也是这样显示的;('display',''))。我根据需要为OK按钮指定不同的操作。这是通过$('#okBTN').attr('onclick','my_function()')完成的 这是可行的,但只是第一次 第一次打开modal并完成步骤时,一切正常。但是,如果我关闭模式,然后重新
onclick=“$('#div').css('display','none')”
(注意:模态也是这样显示的;('display','')
)。我根据需要为OK按钮指定不同的操作。这是通过$('#okBTN').attr('onclick','my_function()')
完成的
这是可行的,但只是第一次
第一次打开modal并完成步骤时,一切正常。但是,如果我关闭模式,然后重新打开它,OK按钮将对其执行否操作。我的意思是,onclick被分配(正确);它在源代码中,它将通过.attr('onclick')
正确地发出警报,但单击该按钮不起任何作用。我将其设置为当模式弹出时,每次分配onclick
;但这几乎就像是有一个卷影副本或者什么东西卡在内存或者DOM中。虽然,我在Firebug中没有看到任何奇怪的东西
我尝试过克隆按钮,重新分配它,然后用替换它。我还尝试过删除它并重新添加它
有什么线索吗?使用
bind
或事件名称绑定器:
$('#okBTN').click(my_function)
我会尝试使用.css('display','block')
而不是.css('display','')
,因为分配一个空白的display
值似乎不是一个好主意(可能可行,但只是为了安全)
您是否尝试过设置元素的.bind()
函数
$('#okBTN').bind('click', my_function);
我的朋友,我不想这么说,但你没有充分利用jQuery的好处
- 为什么通过CSS设置显示?只需使用.hide().show()或.toggle()
- 为什么要通过javascript设置onclick属性?这毫无意义。使用$(elem)。单击(my_函数)李>
祝你好运 1)好的。2) 因为
绑定
和单击
处理程序的行为不符合预期。谢谢。如果默认处理程序不起作用,它可能会指向JS或标记中的另一个问题,这会阻止它们正确运行或绑定。我们需要在你更大的来源上取得一个峰值来评估这一点;但是,请查看W3C的验证实用程序和您最喜欢的JS调试器,以查找标记中的问题。问题是jQuery的单击事件实际上是一个函数队列。绑定单击事件时,它将函数添加到队列中。因为您在显示模式时声明了单击(第159行),所以每次显示时,您都在添加另一个单击事件。执行以下操作:$('conf#modal_ok_btn')。解除绑定('click')。绑定('click',function(){conf_code_check())
这可以通过更符合jQuery模型和事件的体系结构来避免,例如预先绑定您的点击事件,或者使用AJAX内容的live
或委派
。.click()
在功能上相当于.bind('click',…)
。.unbind()
是解决问题的方法。将其放在文档中未发生的所有单击绑定之前。就绪。我不知道你所说的“什么是排气说的队列?”是什么意思?当你点击某个东西时,它不是一个被移除的队列。这意味着你需要不断地重新绑定。您正在将内容添加到一个跨次单击的队列中,因此每次您单击具有多个单击事件的按钮时,所有按钮都将被调用,除非有人返回false或调用e.stopPropagation
。不客气,先生。祝你好运。继续查看代码示例并阅读最佳实践。你很快就会掌握jquery fu。