Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.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
Javascript 显示时的奇怪行为|显示:无元素_Javascript_Jquery - Fatal编程技术网

Javascript 显示时的奇怪行为|显示:无元素

Javascript 显示时的奇怪行为|显示:无元素,javascript,jquery,Javascript,Jquery,我有一个自定义的模态对话,它由一个简单的div和一些css组成。有2个按钮(确定、取消)按钮。取消按钮总是相同的;它通过onclick=“$('#div').css('display','none')”(注意:模态也是这样显示的;('display',''))。我根据需要为OK按钮指定不同的操作。这是通过$('#okBTN').attr('onclick','my_function()')完成的 这是可行的,但只是第一次 第一次打开modal并完成步骤时,一切正常。但是,如果我关闭模式,然后重新

我有一个自定义的模态对话,它由一个简单的div和一些css组成。有2个按钮(确定、取消)按钮。取消按钮总是相同的;它通过
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。