包含类别和子类别的下拉菜单无法正常工作

时间:2014-07-04 13:31:39

标签: php jquery mysql

所以,我有下拉垂直菜单,其中包含类别和子类别。它已正确填充但我点击并选择一些子类别时遇到问题。它不会发生任何事情。只是下拉列表已关闭,并且未加载新页面。 这是cat.php

function category_list($category_parent_id = 0)
{
// build our category list only once
static $cats;
if (!is_array($cats)) {
    $sql = 'SELECT * FROM cat';
    $res = mysql_query($sql);
    $cats = array();
    while ($cat = mysql_fetch_assoc($res)) {
        $cats[] = $cat;
    }
}
// populate a list items array
$list_items = array();
foreach($cats as $cat) {
    // if not a match, move on
    if (( int )$cat['parentid'] !== ( int )$category_parent_id) {
        continue;
    }
    // open the list item
    $list_items[] = '<li>';
    // construct the category link
    $list_items[] = '<a href="product.php?id=' . $cat['id'] . '">';
    $list_items[] = $cat['name'];
    $list_items[] = '</a>';
    // recurse into the child list
    $list_items[] = category_list($cat['id']);
    // close the list item
    $list_items[] = '</li>';
}
// convert to a string
$list_items = implode('', $list_items);
// if empty, no list items!
if ('' == trim($list_items)) {
    return '';
}
// ...otherwise, return the list
return '<ul id="nav-cat">' . $list_items . '</ul>';

}

这是下拉列表

        $(document).ready(function () {
        $('#nav-cat > li > a').click(function (e) {
            $('#nav-cat li ul').slideUp();
            if ($(this).attr('class') != 'active') {
                $('#nav-cat li a').removeClass('active');
                $(this).next().slideToggle();
                $(this).addClass('active');
            } else {
                $('#nav-cat li a').removeClass('active');
            }
            e.preventDefault();
        });
    });

当我点击链接$list_items[] = '<a href="product.php?id=' . $cat['id'] . '">';时,没有任何事情发生。 以下是我传递product.php id的方法。我知道有点乱......

  if(isset($_GET['id']) && is_numeric($_GET['id'])){
   $id = $_GET['id'];
  $query = "SELECT * FROM products WHERE cat = '" . $_GET['id']."'";
  $result = mysqli_query($con, $query) or die("Query failed: " . mysqli_errno($con));
  $line = mysqli_fetch_array($result, MYSQL_BOTH);
  if (!$line) echo '';
      $previd = -1;
      $currid = $line[0];
      if (isset($_GET['id']) && is_numeric($_GET['id'])) {
      $previous_ids = array();
     do {
    $previous_ids[] = $line[0];
    $currid = $line[0];
    if ($currid == (int)$_GET['id']) break;
    $previd = end($previous_ids);
    $line = mysqli_fetch_array($result, MYSQL_BOTH);
} while ($line);
 }

if ($line) {
...

我真的不知道问题出在哪里。有任何想法吗?如果需要,我可以发布更多代码。

1 个答案:

答案 0 :(得分:1)

如上所述on the JQuery API for preventDefault,它说&#34;点击主播不会将浏览器带到新的网址&#34;。如果您在不刷新/离开页面的情况下尝试加载内容,请考虑使用AJAX。

旁注:你的递归php函数创建了很多具有相同id的<ul>。请考虑使用类。