由于多个javascript包含/需要,jQuery事件多次触发

时间:2014-09-12 18:35:32

标签: javascript php jquery html ajax

我在这里遇到了一个问题,这让我很生气。我维护一个遗留的PHP系统。它组织严密,没有使用框架和许多其他问题,例如,在系统的不同部分使用至少5种不同的查询版本。

所以我现在的问题是这个,我有一个搜索表单,当点击一个按钮显示一个项目列表时,我们称之为" A"对象。在每个A项中,有一个展开/切换按钮,用于显示属于A的B项(这是通过使用ajax完成的,通过将特定div的html设置为ajax响应)。然后每个B还有一个展开/切换按钮,以显示属于B的C项。

发生了什么:我点击搜索,显示所有A.我点击展开以显示一个A对象的B项,它们会显示出来。我点击B隐藏它,它隐藏然后再显示。如果我再次点击它,它会隐藏,显示和隐藏。因此,就像每个ajax请求都包含javascript代码并运行它。

我认为这几乎是一个组织问题,我不知道如何正确地包含/要求和插入js。我从昨天开始就一直试图解决这个问题,我想我已经多次看过这个代码,以至于我无法开箱即用。

所以这里有一些组织(我更改了名称,因为有一些业务规则):

SearchResults.php - >声明一个具有静态方法的类,用于打印每个项目A,B和C的HTML以及其他一些辅助方法。为了制作东西"工作",它有一个要求" js.php&#34 ;;否则A展开按钮不起作用,因为它在执行js时不存在且没有绑定任何功能。

search.php - >带有所有搜索选项的HTML表单,没什么重要的。

js.php - > javascript的东西,为什么它在" .php"?我甚至不记得了,但我认为这是因为使用php我可以要求/包括:

<script type="text/javascript" src="../util/js/jquery/1.8.1/jquery.min.js"></script>

<script>

var jQ = jQuery.noConflict(true);

jQ(document).ready(function() {

  jQ(".loadBfromA").click( function(e) {

    if (div.style.display == 'none')
       alert("was hidden, now is showing");
       //call ajax_B.php
       //response is put into the div using .html(data)

    else
       alert("was showing, now is hidden");
    ...

ajax_B.php - &gt;访问数据库的ajax并回显将放入A项div的html代码。在这里,我必须要求SearchResults.php,因为我调用了类的一些方法。

为什么包含jQ(document).ready已多次执行?我该如何解决?有什么方法可以重新组织代码吗?

ajax_B.php是否需要SearchResults.php,包括js,因为SearchResults.php需要js.php?这是否得到回应然后放入div?

我无法解决这个问题因为包含了ajax。

编辑:

我尝试过unbind(&#34;点击&#34;)。bind(&#34;点击&#34;,())并且它没有用。

1 个答案:

答案 0 :(得分:0)

看起来事件在jQ(".loadBfromA")

上被多次绑定

我知道这不是最干净的解决方案,但你可以重写实际的绑定:

jQ(".loadBfromA").bind('click.loadbfroma', function(e) {
    // Do your code
    $(this).unbind('click.loadbfroma');
});

通过这种方式,您可以至少确保始终只绑定一个事件,无论包含多少次代码片段。我知道这并没有真正帮助你解决潜在的问题,但这是一个开始。