2016-03-23 2 views
2

У меня есть 2 ul Список, содержащий два списка элементов и 2 кнопки удаления. Я использую здесь только одну функцию нажатия кнопки для обеих кнопок удаления, и я хотел бы иметь что-то вроде: когда пользователь проверяет элементы в списке 1, тогда только элементы в списке 1 будут удалены после нажатия кнопки удаления без каких-либо элементов в списке 2, или нет, и наоборот. Поскольку теперь я могу использовать кнопку удаления в списке 1 для удаления элементов в списке 2. То, что я прочитал в Интернете, после нажатия кнопки удаления, я могу использовать что-то: $(event.currentTarget).parent(), чтобы получить точный список контента, принадлежит этой кнопке, а затем процесс внутри этого списка. Я прав?Как удалить список отмеченного элемента из определенного списка

$(document).ready(function() { 
 
    $("#delete").click(function() { 
 
     var deleteItem = []; 
 
     $("input:checkbox").each(function() { 
 
      var $this = $(this); 
 

 
      if ($this.is(":checked")) { 
 
       deleteItem.push($this.attr("name")); 
 
      } 
 
     }); 
 
     if (deleteItem != []) { 
 
      if (deleteItem.indexOf("cbox1") > -1 && deleteItem.indexOf("cbox2") > -1) { 
 
       $("#box1").remove(); 
 
       $("#box2").remove(); 
 
      } 
 
     } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<ul>List 1 
 
    <li id="box1"><span><input type="checkbox" name="cbox1" value="1" /><a href="http://www.w3schools.com">Visit W3Schools1.com!</a></span></li> 
 
    <li id="box2"><span><input type="checkbox" name="cbox2" value="2" /><a href="http://www.w3schools.com">Visit W3Schools2.com!</a></span></li> 
 
    <li id="box3"><span><input type="checkbox" name="cbox3" value="3" /><a href="http://www.w3schools.com">Visit W3Schools3.com!</a></span></li> 
 
    <button id="delete">Delete</button> 
 
</ul> 
 

 

 
<ul>List 2 
 
    <li id="box1"><span><input type="checkbox" name="cbox1" value="1" /><a href="http://www.w3schools.com">Visit W3Schools1.com!</a></span></li> 
 
    <li id="box2"><span><input type="checkbox" name="cbox2" value="2" /><a href="http://www.w3schools.com">Visit W3Schools2.com!</a></span></li> 
 
    <li id="box3"><span><input type="checkbox" name="cbox3" value="3" /><a href="http://www.w3schools.com">Visit W3Schools3.com!</a></span></li> 
 
    <button id="delete">Delete</button> 
 
</ul>

+0

Недействительно иметь несколько элементов HTML с одинаковым идентификатором. Например, у вас есть две кнопки с идентификатором 'id =" delete ", и это неверно. Идентификатор должен быть уникальным. Вы можете назначить уникальный идентификатор или использовать класс. –

+0

http://stackoverflow.com/a/36180583/4763793 Проверьте мой ответ и добавьте комментарии ниже моего ответа, если вам нужны какие-либо изменения. –

ответ

2

Как я упоминал в своем комментарии, вы должны использовать класс вместо id, потому что идентификатор должен быть уникальным.

Here is a Fiddle Demo.

Jquery:

$('.delete').click(function() { 
    var items = $(this).parent('ul').find('input:checked'); 
    items.closest('li').remove(); 
}); 

Когда элемент с классом 'удалить' щелкает, он находит родительские ул, а затем ищет проверяемые входы. Как только они будут найдены, он ищет ближайший ли для этих входов и удаляет их.

HTML:

<ul>List 1 
    <li class="box1"><span><input type="checkbox" name="cbox1" value="1" /><a href="http://www.w3schools.com">Visit W3Schools1.com!</a></span></li> 
    <li class="box2"><span><input type="checkbox" name="cbox2" value="2" /><a href="http://www.w3schools.com">Visit W3Schools2.com!</a></span></li> 
    <li class="box3"><span><input type="checkbox" name="cbox3" value="3" /><a href="http://www.w3schools.com">Visit W3Schools3.com!</a></span></li> 
    <button class="delete">Delete</button> 
</ul> 


<ul>List 2 
    <li class="box1"><span><input type="checkbox" name="cbox1" value="1" /><a href="http://www.w3schools.com">Visit W3Schools1.com!</a></span></li> 
    <li class="box2"><span><input type="checkbox" name="cbox2" value="2" /><a href="http://www.w3schools.com">Visit W3Schools2.com!</a></span></li> 
    <li class="box3"><span><input type="checkbox" name="cbox3" value="3" /><a href="http://www.w3schools.com">Visit W3Schools3.com!</a></span></li> 
    <button class="delete">Delete</button> 
</ul> 

ОП спросил, как найти имя проверяемых входов. Вот один из способов сделать это:

$('.delete').click(function() { 
    var items = $(this).parent('ul').find('input:checked'); 
    //iterate over objects and log the name 
    $.each(items, function(index, value) { 
    console.log($(this).attr('name')); 
    }); 
    items.closest('li').remove(); 
}); 

Я добавил итератор, который будет проходить через объекты в items и выводить имя атрибута консоли (F12 в большинстве браузеров). Вот updated Fiddle Demo.

+0

спасибо devlin, могу я спросить, что после того, как переменная items содержит список проверенных входных данных, как я могу получить идентификатор/имя этого ввода. Я использую: items.each (function (i) { \t \t deleteItem.push (i.attr ("name")) }) но он не работает. Спасибо – Sonn

+0

@Sonn - я обновил свой ответ. –

+0

Большое спасибо Devlin – Sonn

1

Примечание: Id должен быть уникальным. Если вы стремящиеся использовать тот же идентификатор, что преобразования в класс

рабочего примеру

$(document).ready(function() { 
 

 
    $(".delete").click(function() { 
 
    var deleteItem = []; 
 
    $("input:checkbox").each(function() { 
 
     var $this = $(this); 
 
     if ($this.is(":checked")) { 
 
     $(this).parent().parent().remove() 
 
     } 
 
    }); 
 
    }); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<ul>List 1 
 
    <li id="box1"><span><input type="checkbox" name="cbox1" value="1" /><a href="http://www.w3schools.com">Visit W3Schools1.com!</a></span> 
 
    </li> 
 
    <li id="box2"><span><input type="checkbox" name="cbox2" value="2" /><a href="http://www.w3schools.com">Visit W3Schools2.com!</a></span> 
 
    </li> 
 
    <li id="box3"><span><input type="checkbox" name="cbox3" value="3" /><a href="http://www.w3schools.com">Visit W3Schools3.com!</a></span> 
 
    </li> 
 
    <button class="delete">Delete</button> 
 
</ul> 
 

 

 
<ul>List 2 
 
    <li id="box1"><span><input type="checkbox" name="cbox1" value="1" /><a href="http://www.w3schools.com">Visit W3Schools1.com!</a></span> 
 
    </li> 
 
    <li id="box2"><span><input type="checkbox" name="cbox2" value="2" /><a href="http://www.w3schools.com">Visit W3Schools2.com!</a></span> 
 
    </li> 
 
    <li id="box3"><span><input type="checkbox" name="cbox3" value="3" /><a href="http://www.w3schools.com">Visit W3Schools3.com!</a></span> 
 
    </li> 
 
    <button class="delete">Delete</button> 
 
</ul>

+0

спасибо Рино !!!! – Sonn

0

Да вы правы в использовании .parent) метод Jquery (, Если я понимаю, что вы делаете, вы можете улучшить свой код таким образом:

$(document).ready(function() { 

    $("#delete").click(function() { 

    var parentUl = $(this).parent(); // get the parent url of the clicked button 
    var li_items = parentUl.find('li'); // get the li in the parent ul 

    li_items.each(function() { // for each li retrevied 
     if ($(this).children('input:checkbox').is(':checked')) // if the input is checked 
      $(this).remove(); // we remove it 
    }); 

}); 

Надеюсь, это поможет! :)

EDIT:

Как другой говорит, вы должны использовать класс вместо идентификатора. по определению идентификатор должен рассматриваться как уникальный идентификатор блока в вашем html. в вашем случае у вас есть 2 кнопки, поэтому лучше сделать это: <button class="delete"></button>

+0

merci Mathieu !!!! – Sonn

Смежные вопросы