Ошибка при использовании .prop() с переменной в качестве селектора id. В конце концов, я хочу, чтобы флажок был отмечен, когда он выбран, и не отмечен, если выбран во время проверки..prop() не выбрал флажок с переключателем переменных
Это часть списка состояния/города, который сжимается и расширяется при нажатии на родительский элемент списка.
Fiddle: https://jsfiddle.net/xeud8khg/
$('#expList input:checkbox').unbind('click').click(function() {
var clicked = "#" + event.target.id;
$(clicked).prop('checked', true);
console.log(clicked); //To see that the right id was selected.
return false;
});
Update: Используется ответ Barmar, чтобы добавить переключая чекбокса и нажав на этикетке. Я уверен, что есть более чистый способ, но это сработало:
//Fake checkbox
$('#expList input:checkbox').off('mouseup').mouseup(function(event) {
var clicked = "#" + event.target.id;
if ($(clicked).is(':checked'))
$(clicked).prop('checked', false);
else
($(clicked).prop('checked', true));
return false;
});
//Fake label
$('#expList label').off('mouseup').mouseup(function(event) {
labelID = "#" + $(this).attr('for');
if ($(labelID).is(':checked'))
$(labelID).prop('checked', false);
else
($(labelID).prop('checked', true));
return false;
});
Обновлено скрипку: https://jsfiddle.net/fasr5frp/
'.unbind()' осуждается, вы должны использовать '.off()'. И вы можете использовать '$ (this)' или '$ (event.target)' вместо поиска идентификатора. – Barmar
Использование 'event' в качестве глобальной переменной не является переносимым, оно должно быть аргументом для обратного вызова. – Barmar
Если вы установили точку останова после '.prop()', вы можете видеть, что этот флажок установлен, но что-то не снимает его после возвращения функции. Я не знаю, почему, поскольку вы предотвращаете дефолт. – Barmar