#javascript #css
#javascript #css
Вопрос:
У меня выделяются строки, если установлен их флажок. Он работает на одной таблице, но по какой-то причине я не понимаю, почему он не делает то же самое с другой. Все остальные функции именно такие, как я хочу.
$(document).ready(function() {
$('#myteam').on('change', '[type=checkbox]', function() {
var $this = $(this);
var row = $this.closest('tr');
if ($this.prop('checked')) { // move to top
row.insertBefore(row.parent().find('tr:first-child'))
} else { // move to bottom
row.insertAfter(row.parent().find('tr:last-child'))
}
});
$('#otherteam').on('change', '[type=checkbox]', function() {
var $this = $(this);
var row = $this.closest('tr');
if ($this.prop('checked')) { // move to top
row.insertBefore(row.parent().find('tr:first-child'))
} else { // move to bottom
row.insertAfter(row.parent().find('tr:last-child'))
}
});
$('td:first-child input').change(function() {
$(this).closest('#myteam tr').toggleClass("highlight", this.checked);
});
$('td:first-child input').change(function() {
$(this).closest('#otherteam tr').toggleClass("highlight", this.checked);
});
});
Комментарии:
1. можете ли вы также создать общий доступ к html
2. jsfiddle ведет себя правильно?
3. все работает хорошо, за исключением случаев, когда вы устанавливаете флажок с правой стороны, строка не выделяется, как с левой стороны
4. @Josh теперь я это вижу
Ответ №1:
Как упоминал K.Angel7, небольшая проблема с селектором jQuery.
Я исправил jsfiddle, и вот что вы делаете: http://jsfiddle.net/Manoj85/k1xfehrq/98 /
$('#otherteam td input').change(function() {
console.log("Other Team");
$(this).closest('#otherteam tr').toggleClass("highlight", this.checked);
});
$('#myteam td input').change(function() {
console.log("My Team");
$(this).closest('#myteam tr').toggleClass("highlight", this.checked);
});
Всегда рассматривайте возможность добавления определенного родительского элемента, в вашем случае, #myteam и #otherteam. Было бы лучше поддерживать любые обновления в будущем.
Надеюсь, это поможет.
Ответ №2:
Одним из решений было бы сделать ваш селектор более точным.
$('#myteam td:first-child input').change(function() {
$(this).closest('#myteam tr').toggleClass("highlight", this.checked);
});
$('#otherteam td:first-child input').change(function() {
$(this).closest('#otherteam tr').toggleClass("highlight", this.checked);
});
Однако было бы проще переместить переключатель выделения в другую функцию изменения.
$('#myteam').on('change', '[type=checkbox]', function() {
var $this = $(this);
var row = $this.closest('tr');
if ($this.prop('checked')) { // move to top
row.insertBefore(row.parent().find('tr:first-child'))
} else { // move to bottom
row.insertAfter(row.parent().find('tr:last-child'))
}
$this.toggleClass("highlight", this.checked);
});
$('#otherteam').on('change', '[type=checkbox]', function() {
var $this = $(this);
var row = $this.closest('tr');
if ($this.prop('checked')) { // move to top
row.insertBefore(row.parent().find('tr:first-child'))
} else { // move to bottom
row.insertAfter(row.parent().find('tr:last-child'))
}
$this.toggleClass("highlight", this.checked);
});
Это должно ответить на вопрос. Но я заметил, что функции можно упростить. Вы можете заменить весь размещенный код только этими строками:
$(document).ready(function() {
$('#myteam, #otherteam').find(':checkbox').change(function() {
var $this = $(this);
var row = $this.closest('tr');
if (this.checked) { // move to top
row.prependTo(row.parent())
} else { // move to bottom
row.appendTo(row.parent())
}
row.toggleClass("highlight", this.checked);
});
});
Обратите внимание, что :checkbox
это псевдоселектор, определенный в jquery
Вот скрипка, в которой я переработал еще кое-что.
Комментарии:
1. отлично, я предположил, что есть способ сделать его более эффективным.. но для моего уровня мне пришлось делать их отдельно, чтобы заставить их работать в первую очередь
2. @Josh умное мышление
Ответ №3:
Вот в чем проблема $('td:first-child input')
, удаление :first-child
во втором событии изменения будет тем, что вам нужно, потому что это не первый дочерний элемент.