jQuery 无法正常工作

Posted

技术标签:

【中文标题】jQuery 无法正常工作【英文标题】:Jquery is not working properly 【发布时间】:2015-11-13 17:17:42 【问题描述】:

这是(html + php)代码。

<li class='has-sub cuisines'><a href='javascript:void(0)'><span>Cuisine</span></a>
        <ul>
      <li class=""><a href='javascript:void(0)'><span><input type="text" name="search_cuisine" id="search_cuisine" placeholder=" Search Cuisine Here" /></span></a></li>
       <!--<img id="loader_cuisine" src="images/preloader_8.gif"/>-->
               <div id="list_cuisine" >
              <?php
              $row_count=0;
            $query="select cuisine_ID,cuisine_name from cuisine_master where del_flag=1 and display_flag=1 order by cuisine_name";
            $r= mysql_query($query);
            while($result=  mysql_fetch_array($r))
            

                $ii=0;
                $query12="select distinct r.res_ID from restaurant_master r, buffet_master b, restaurant_cuisine_master cm where r.del_flag=1 and r.res_status=1 and b.res_ID=r.res_ID and cm.res_ID=r.res_ID and cm.cuisine_ID=$result[cuisine_ID]";
                $r12= mysql_query($query12);
                    while($result12=  mysql_fetch_array($r12))
                    

                               $ii++;

                    
                if($row_count<10 && $ii>0)
                
                    $row_count++;

               ?>
            <li><a href='javascript:void(0)'><span><input type="checkbox" name="cuisine[]" id="cuisine_<?php echo $result['cuisine_ID']; ?>" class="cuisine" value="<?php echo $result['cuisine_ID']; ?>"/><label for="cuisine_<?php echo $result['cuisine_ID']; ?>"><?php echo $result['cuisine_name']; ?>(<?php echo $ii; ?>)</label></span></a></li>
               <?php
                

            
            ?>
               </div>
       </ul>    
       </li>

这是 Jquery 代码

    $(document).ready(function()
    $('.cuisines').click(function(e)
        $('#additional,#seating,#budget,#locations,#last_order,#discount,#buffet_type').removeClass('active');
        $('.cuisines').addClass('active');
        $('.cuisines ul').slideDown('normal');
        $('#locations ul').slideUp('normal');
        $('#additional ul').slideUp('normal');
        $('#seating ul').slideUp('normal');
        $('#budget ul').slideUp('normal');
        $('#last_order ul').slideUp('normal');
        $('#discount ul').slideUp('normal');
        $('#buffet_type ul').slideUp('normal');

    );

);

这是更新的 javascript 代码,但美食 li 打开后没有关闭。 当我点击美食 li 时,它会打开所有 ul 元素,但是当我点击它的 ul 元素时,也会打开和关闭所有 ul 元素,这不应该这样做,因为 li 和 ul 元素的 id 和类不同。

【问题讨论】:

使用您呈现的 HTML 和 javascript 创建一个 JSFiddle,以便无需任何 PHP 代码即可查看它。 您缺少选择器的上下文。 这是怎么回事。您的&lt;div id="list_cuisine" &gt; 不在li 内。我认为你的 HTML 结构是错误的。请改正 jQuery 工作正常,你用错了。 如何检测美食ul是否打开以及打开时如何在jquery中关闭 【参考方案1】:

这段代码应该写成这样:

$(document).ready(function()
    var i=0;
    $('.cuisines').click(function() // click the cuisines li
        i++;
        $(this).addClass('active').siblings('li').removeClass('active'); // add an active class to clicked li and remove from other siblings li
        $('ul', this).slideDown('normal'); // slidedown the ul of clicked li only
        $(this).siblings('li').find('ul').slideUp('normal'); // slideup all the siblings ul which are in view.

        if(i%2===0)
           $('ul', this).slideUp('normal'); // slideup the child ul of clicked li
           $(this).removeClass('active'); // remove the active class from current active li.cuisines
        
    );

);    

【讨论】:

【参考方案2】:

解决方案实际上非常简单,只需要对代码进行两次小改动。

解决方案

    jQuery 函数slideToggle 会自动执行您需要的操作。

只需从以下位置更改行:

$('.cuisines ul').slideDown('normal');

 $('.cuisines ul').slideToggle('normal');
    将点击处理程序选择器更改为仅针对顶部链接:

HTML:

<li class='has-sub cuisines'>
  <a href='javascript:void(0)'>
   <span class="toggler">Cuisine</span>
  </a>
   ...
</li>`

JS:

  $('li.cuisines span.toggler').click(function(e)
    ...

这里是工作示例的链接:https://jsfiddle.net/56sdLxht/

希望有帮助!

【讨论】:

【参考方案3】:

尝试添加 stopPropagation 函数。

<script type="text/javascript">
$(document).ready(function()
    var i=0;
    $('.cuisines').click(function(e)
        e.stopPropagation();

        i++;
        //alert("hello : "+$(".cuisines ul").val());
        $('#additional,#seating,#budget,#locations,#last_order,#discount,#buffet_type').removeClass('active');
        $('.cuisines').addClass('active');
        $('.cuisines ul').slideDown('normal');
        $('#locations ul').slideUp('normal');
        $('#additional ul').slideUp('normal');
        $('#seating ul').slideUp('normal');
        $('#budget ul').slideUp('normal');
        $('#last_order ul').slideUp('normal');
        $('#discount ul').slideUp('normal');
        $('#buffet_type ul').slideUp('normal');

        if(i%2===0)
        $('.cuisines ul').slideUp('normal');
        $('.cuisines').removeClass('active');
        
    );

);    

</script>

【讨论】:

【参考方案4】:

HTML

美食

<div class="menu-toggle hidden" id="customize-menu">
    <ul>
      <li class="">
      <a href='javascript:void(0)'>
      <span>
      <input type="text" name="search_cuisine" id="search_cuisine" placeholder=" Search Cuisine Here" />
      </span>
      </a>
      </li>
       <!--<img id="loader_cuisine" src="images/preloader_8.gif"/>-->
        <div id="list_cuisine" >
        <li>
        <a href='javascript:void(0)'>
        <span>
        <input type="checkbox" name="cuisine[]" id="cuisine_<?php echo $result['cuisine_ID']; ?>" class="cuisine" value="<?php echo $result['cuisine_ID']; ?>"/>
        <label for="cuisine_<?php echo $result['cuisine_ID']; ?>"></label>
        </span>
        </a>
        </li>
        </div>
    </ul> 
</div>    

脚本

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

<script type="text/javascript">
$(document).ready(function()
    $('.cuisines').click(function(e)       
      $(".menu-toggle:not(#customize-menu)").hide();
     $("#customize-menu").toggle();
	);
     $('.cuisines input,ul,li').click(function(e)       
     e.stopPropagation();
	);
);
</script>

Js Fiddle Link [此处已解决]

https://jsfiddle.net/dybwbs92/5/embedded/result/

【讨论】:

以上是关于jQuery 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 在 Laravel 5 中无法正常工作

jQuery 无法正常工作

Jquery模式无法正常工作

所需的 jQuery(依赖表达式)无法正常工作

JQuery Datepicker 无法正常工作

在 div 内部时,jQuery 滚动无法正常工作