2012-02-02 2 views
0

Я пытаюсь сделать Jquery функции удаления, вот код, который я написал -Jquery функции удаления

$("a.delete").click(function(){   
     var target = $(this).attr("id");    
     var c = confirm('Do you really want to delete this category?'); 
     if(c==true) { 
    $(target+"ul").delay(3000).fadeOut(200); 
    } 
    else { 
    return false; 
    } 
    }); 

Хорошо теперь к проблеме, когда я нажимаю, кнопка А с классом удалить, это правильно, отображает диалог (и идентификатор верен), но после того, как я нажму «да», он удалит его с помощью php, без эффекта jquery fadeOut. Мой PHP код -

public function deleteCategory() { 
    if(isset($_GET['action']) && $_GET['action'] == 'delete') { 
     $id = (int)$_GET['id']; 
     $sql = "DELETE FROM `categories` WHERE `id` = '".$id."'"; 
     mysql_query($sql); 
    } 
    } 

Не знаете, где это проблема, но я думаю, что внутри $ (целевой + «уль»), так как я не уверен, если это добавит целевое значение и уль вместе.

В добавлении, как я могу предотвратить удаление, если я не нажимаю нет? В настоящее время, если я нажимаю no, он все равно удалит категорию.

Если вам нужна другая информация - спросите.

Полный код -

public function showCategories() { 
    if(isset($_SESSION['logged_in']) && isset($_SESSION['user_level']) && $_SESSION['user_level'] == 'admin') { 
     $sql = "SELECT * FROM `categories`"; 
     $q = mysql_query($sql); 
     if(mysql_num_rows($q) > 0) { 
     ?> 
      <div class="recentorders" style="display: none;" id="categoryBox"> 
      <h5 class="colr">Categories</h5> 
       <div class="account_table" style="width: 688px;"> 
        <ul class="headtable" style="width: 680px;"> 
         <li class="order">ID</li> 
         <li class="action" style="width: 430px;">Category Name</li> 
         <li class="action nobordr">Options</li> 
        </ul> 
     <?php 
     while($row = mysql_fetch_array($q)) { 
      ?> 
      <ul class="contable" style="width: 680px;" id="cat<?php echo $row['id']; ?>ul"> 
       <li class="order"><?php echo $row['id']; ?></li> 
       <li class="action" style="width: 430px;"><?php echo $row['name']; ?></li> 
       <li class="action nobordr"><a href="?action=edit&id=<?php echo $row['id']; ?>#" class="first">Edit</a><a class="delete" id="cat<?php echo $row['id']; ?>" href="?action=delete&id=<?php echo $row['id']; ?>#">Delete</a></li> 
      </ul>   
      <?php 
     } 
     ?> 
       </div> 
      </div> 
     <?php 
     } 
     else { 
     // No categories created, please create one first. 
     } 
    } 
    else { 
     header('location: account.php'); 
    } 
    } 

    public function deleteCategory() { 
    if(isset($_GET['action']) && $_GET['action'] == 'delete') { 
     $id = (int)$_GET['id']; 
     $sql = "DELETE FROM `categories` WHERE `id` = '".$id."'"; 
     mysql_query($sql); 
    } 
    } 
+0

Как отправить информацию о сервере о категории удалить? – Seagull

+0

Дайте нам образец HTML, трудно сказать, почему селектор может быть неправильным. Есть несколько подходов, которые вы могли бы использовать, например $ ('#' + target + 'ul') OR $ ('ul', this). Без HTML я не знаю, если вы ищете UL внутри контейнера или если у вас есть другой элемент с идентификатором цели и «UL» после. –

ответ

0

Если вы ищете по идентификатору вам нужно префикс вашего выбора с «#»:

100% рабочий образец на jsFiddle:

http://jsfiddle.net/E7QfY/

Изменить

$(target+"ul").delay(3000).fadeOut(200); 

к

$('#' + target+"ul").delay(3000).fadeOut(200); 

ИЛИ

$(this).closest('ul').delay(3000).fadeOut(200); 

Я хотел бы также изменить код для этого:

$("a.delete").click(function(event){   
     if(confirm('Do you really want to delete this category?') == true){    
      $(this).closest('ul').delay(3000).fadeOut(200); 
      window.location.href = $(this).attr('href'); //OR use AJAX and do an event.preventDefault(); 
     } 
     else 
      event.preventDefault(); 
}); 
+0

Тем не менее, та же проблема; ( – user1184908

+0

Я добавил образец комментария jsFiddle к комментарию как доказательство того, что смена селектора работает: http://jsfiddle.net/E7QfY/ –

0

Это потому, что вы используете якорный тег, который вызывает обратную передачу на сервер, который делает вашу страницу обновления, прежде чем увидеть анимацию. Убедитесь, что ваш якорный тег имеет href, обозначенный как «#», чтобы остановить обратную передачу.

+0

Лучший подход - вернуть false; или передать событие клиенту-клику и выполнить event.preventDefault(); –

+0

Хм, с хешем, я исправил проблему с отменой, но проблема fadeOut все еще сохраняется. – user1184908

+0

Скорее всего, ваш селектор неверен. Дайте нам образец HTML, чтобы мы могли видеть, что вы пытаетесь выбрать. Помните, что если вы ищете по ID префикс своего селектора с помощью «#». –

0

Вы должны использовать что-то еще, кроме тега A, например. span или div. А затем после нажатия этого элемента сделать свой FadeOut и после перенаправления на PHP скрипт, который удаляет свой объект:

$("SPAN,DIV.delete").click(function(){   
    var target = $(this).attr("id");    
    var c = confirm('Do you really want to delete this category?'); 
    if(c==true) { 
     $(target+"ul").delay(3000).fadeOut(200); 
     window.location.href = URL TO PHP FILE 
    } 
    else { 
     return false; 
    } 
}); 
+0

Какая точка угасания, если вы собираетесь перенаправить пользователя на страницу удаления? –

+0

Я понятия не имею, в чем смысл :) ask user1184908. Вероятно, он хочет дать пользователю время, чтобы выпить кофе. :) –

+0

Ну, в принципе мне нужно, чтобы он выглядел «Привлекательным», с простым перенаправлением, это было бы не то же самое!)! Я хочу, чтобы он выглядел круто :), и поэтому пользователям не придется ждать обновления страницы, но вместо этого имеет эффект fadeout. – user1184908