2010-01-12 4 views
0

Я строю систему, в которой пользователь создает свою собственную навигационную систему, процесс заключается в том, когда пользователь посещает сайт, есть список доступных тем, которые они могут выбрать, выбрать верхние создает и аккордеон, который содержит все, что темы контента, нажав на тему снова следует удалить верхнюю часть, в настоящее время у меня есть этот код, но он не работает, может ли один наставит меня,Удалить элемент из HTML с помощью jQuery

Javascript

$("a.navlink").click(function(ev) { 
     var url = $(this).attr("href") 
     var id = $(this).attr("id") 
     ev.preventDefault(); 
     if(!$(this).hasClass('saved')) { 
      //$("a.navlink").addClass('active') 
       $.ajax ({ 
        url: url, 
        type: "POST", 
        data: "method=add&id="+id, 
        success: function (html) { 
         $('#accordion').accordion('destroy'); 
         $("#accordion").append(html); 
         $('#accordion').accordion({ 
          //active: 0, 
          header:'h2.'+id, 
          collapsible:true 
         }); 
        $("a.navlink").addClass('saved'); 
        } 
       }); 
     } else if($("a.navlink").hasClass('saved')) { 
      $.ajax ({ 
       url: url, 
       type: "POST", 
       data: "method=delete", 
       success: function (html) { 
        $("a.navlink").removeClass('saved'); 
        //$("."+id).remove(); 
       } 
      });  
     } 
    }); 

HTML,/PHP это строит аккордеон

<?php 
var_dump($_POST); 
if(isset($content)) { 
    foreach($category_name as $k => $v) { 
     echo "<h2 class=".$this->input->post('id')."><a href='#'>$v[category_name]</a></h2>"; 
     echo "<div class='$v[category_name]'>"; 
    } 
    $replace = array(".", "png", "gif", "jpg"); 
    $count = 0; 
    foreach($content as $k=>$v) { 
    $count ++; 
    $image_name = str_replace($replace, "", $v['image_name']); 
    echo "<a class='contentlink' href='index.php/home/get_content_abstract/$v[content_id]'>"; 
    echo "<img src='/media/uploads/".strtolower($v['category_name'])."/".$image_name."_thumb.png' alt='This is the picture' />"; 
    echo "</a>"; 
    } 
    echo "</div>"; 
//die(var_dump($content)); 
} 

if(isset($favourites_category)) { 
    //die(var_dump($favourites)); 
    echo "<h2 class=".$this->input->post('id')."><a href='#'>$favourites_category</a></h2>"; 
    $count = 0; 
    $replace = array(".", "png", "gif", "jpg"); 
    foreach ($favourites as $row) { 
     $count ++; 
     $image_name = str_replace($replace, "", $row['image_name']); 
     echo "<div class='$favourites_category'>"; 
     echo "<a class='contentlink' href='index.php/home/get_content_abstract/$row[content_id]'>"; 
     echo "<img src='/media/uploads/".strtolower($row['category_name'])."/".$image_name."_thumb.png' alt='This is the picture' />"; 
     echo "<a/>"; 
     echo "</div>"; 
    } 
} 
?> 

В основном мне нужно пропустить, чтобы определить каждый созданный аккордеон, и если его ссылка нажата, когда у него есть аккордеон на скрипке, аккордеон удаляется из HTML на экране.

ответ

1

Функция обратного вызова имеет иной контекст, чем вызов ajax. Ваши переменные id и url недоступны в ваших обратных вызовах. Вы можете передать их через вызов ajax, чтобы использовать его в обратном вызове, но ответ должен быть JSON вместо HTML.

Кроме того, у вас есть $("a.navlink") (который будет оценивать в первую a.navlink) вместо $(this) в нескольких местах (как else if).

Вот некоторые обновленный код, но я не реально ясно, что вы пытаетесь сделать

$("a.navlink").click(function(ev) { 
    var url = $(this).attr("href") 
    var id = $(this).attr("id") 
    ev.preventDefault(); 
    if(!$(this).hasClass('saved')) { 
    //$("a.navlink").addClass('active') 
    $.ajax ({ 
     url: url, 
     type: "POST", 
     data: {method: 'add', id: id}, 
     dataType: "json", 
     success: function (response) { 
     //vars url and id are not accessible here 
     //so it needs to be returned from the ajax call 
     $('#accordion').accordion('destroy'); 
     $("#accordion").append(response.html); 
     $('#accordion').accordion({ 
      //active: 0, 
      header:'h2', 
      collapsible:true 
     }); 
     $("#" + response.id).addClass('saved'); 
     } 
    }); 
    } else if($(this).hasClass('saved')) { 
    $.ajax ({ 
     url: url, 
     type: "POST", 
     data: {method: 'delete', id: id}, 
     dataType: "json", 
     success: function (response) { 
     $("#" + response.id).removeClass('saved'); 
     $("h2." + response.id).remove(); 
     } 
    });  
    } 
}); 
Смежные вопросы