2015-07-17 3 views
0

У меня есть этот код, который проверяет отмеченные флажки и показывает, все ли они выбраны, ни один или список из них.Флажки, выберите все/none сообщение

Код работает отлично, но я думаю, что это очень долго, я не эксперт в javascript. Есть ли способ сделать более короткий код?

var Desktop = $(".multiselect.desktop input[name$='[]']:checked").map(function() {return this.value;}).get().join(', '); 

if(Desktop.split(', ').length == 4){ Desktop = 'All';} 
else if(Desktop.length == 0){ Desktop = 'None';} else {Desktop = Desktop;} 
+0

Ну вы можете начать избавившись от 'еще {Desktop = Desktop}', который не делает выполнить что угодно. – dman2306

ответ

1

Вы можете использовать тройной оператор и избавиться от 4-х линий.

var len = Desktop.split(', ').length; 

Desktop = len === 4 ? 'All' : (len === 0 ? 'None' : Desktop); 
+0

это не намного короче, но определенно более изящно;) В любом случае этот пример не возвращает «none» – helderk

+0

@helderk, который он делает. Если вы посмотрите на вторую часть инструкции. –

1

что-то подобное будет работать более универсально, а не только тогда, когда у вас есть 4 флажков:

var max = $(".multiselect.desktop input[name$='[]']").length(); 
var $checked = $(".multiselect.desktop input[name$='[]']:checked"); 

var Desktop = ($checked.length() == max)?'All':($checked.length()?$checked.map(function() {return $(this).val();}).join(', '):'None'); 
+0

Этот пример длиннее, но действительно хорошая идея поймать максимальное количество флажков. Но также нет возвратов, которые выбраны chekcboxes, когда они еще не все. – helderk

+0

не больше, это оптимально, но добавляет максимальную проверку, иначе будет всего 2 строки, если вы удалите max и замените его на 4. Когда не будет выбранных элементов, он вернет «Нет» ... '$ checked.length()? $ checked.map (...). join (','): «Нет». если max - будет retuen 'All', если разные возвращают разделенную запятыми строку отмеченных значений поля. – Reflective

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