Я был бы признателен за любую помощь в решении проблемы с отключенной/включенной кнопкой, с которой я столкнулся. Я изучаю Jquery, поэтому решение этой проблемы будет для меня большим уроком. Я составил список пользователей, использующих классы div:
<div class = "userList">
<div class = "user">Tom</div>
<div class = "user">Ben</div>
<div class = "user">George</div>
<div class = "user">Tony</div>
</div>
Под списком пользователей у меня есть четыре кнопки:
<div class = "actions">
<button id = "add" disabled = "disabled">Add</button>
<button id = "block" disabled = "disabled">Block</button>
<button id = "message" disabled = "disabled">Message</button>
<button id = "exit">Exit</button>
</div>
Как видите, 3 из 4 кнопок по умолчанию отключены. Что я хочу сделать, так это щелкнуть пользователя, который выделит пользователя цветом фона и в то же время активирует 3 отключенные кнопки. Я также хотел бы настроить таргетинг на отдельные кнопки по идентификатору. Только имя пользователя, на которое я нажимаю, должно изменить цвет фона и вернуться к исходному цвету, как только я нажму на другое имя пользователя или за пределами div «userList».
Это полный HTML-код:
<div id = "wrapper">
<div class = "userList">
<div class = "user">Tom</div>
<div class = "user">Ben</div>
<div class = "user">George</div>
<div class = "user">Tony</div>
</div>
<div class = "actions">
<button id = "add" disabled = "disabled">Add</button>
<button id = "block" disabled = "disabled">Block</button>
<button id = "message" disabled = "disabled">Message</button>
<button id = "exit">Exit</button>
</div>
</div>
Это код CSS:
@charset "utf-8";
* {
padding:0;
margin:0;
font-family:Arial, Helvetica, sans-serif;
}
#wrapper {
width:300px;
min-height:100px;
background-color:#ddd;
margin:0 auto;
padding:20px;
}
.userList {
border:1px solid #aaa;
padding:20px;
margin-bottom:20px;
}
.user {
background:#eee;
line-height:28px;
border:1px solid #aaa;
margin-bottom:5px;
padding-left:10px;
}
.user:hover {
background:#06F;
color:#fff;
border:1px solid #000;
}
.actions {}
Я надеюсь, что кто-то может помочь мне с этим! Это многому научит меня и, надеюсь, многих других людей.
Предполагая, что я правильно понял вашу проблему, возможно, что-то вроде этого:
$('.user').click(function(event){
removeHighlight();
$(event.target).addClass('highlight'); // Highlight selected item
$('.btn-action').attr('disabled', false); // Enable action buttons
});
$(document).click(function(event) {
// If clicked element does not have the class 'userList'
// and does not have a parent element with a class 'userList'
if (!$(event.target).hasClass('userList') && !$(event.target).parents('.userList').length) {
removeHighlight();
$('.btn-action').attr('disabled', true); // Disable action buttons
}
});
function removeHighlight() {
$('.user').each(function() { // Remove highlight class for any previously selected item
$(this).removeClass('highlight');
});
}
Добавьте это в свои стили:
.user.highlight {
background:#06F;
color:#fff;
border:1px solid #000;
}
И добавьте класс btn-action
к своим кнопкам.
Ошибки консоли есть? Какую версию jQuery вы используете?
Я связался с этим: <script src = "ajax.googleapis.com/ajax/libs/jquery/3.3.1/…> . Ошибок консоли нет.
Если есть ошибки консоли, пишите сюда. Также попробуйте сравнить свой код со скриптом, на который я ссылался выше, и посмотрите, есть ли какие-либо различия.
Большое спасибо за ваше время. Это должно быть новая ошибка, потому что я точно скопировал ваш код, и он все еще не работает. Должно быть, я делаю что-то не так с моим файлом .js.
Во всяком случае, я буду играть с этим, пока это не работает. Ваша рабочий пример работает на 100% так, как я хочу. Большое спасибо за вашу помощь!
Можете ли вы попробовать включить https://
в свой скрипт, который ссылается на библиотеку jQuery? Итак, в основном: <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Это уже так. Я также скопировал / вставил вашу ссылку. Все то же самое.
Привет, я только что получил его на работу. Все, что я сделал, это поместил внешний файл js непосредственно перед закрывающим тегом body. Большое спасибо!!! Это именно то, что я был после.
О да. На самом деле я собирался упомянуть об этом на случай, если добавление https://
не сработает (неверно прочитал ссылку). Важный урок, который следует усвоить, в идеале ваши скрипты должны быть размещены перед закрывающим тегом body, чтобы гарантировать, что все элементы были отрисованы до того, как будут обработаны любые ссылки на них в ваших скриптах. Молодец. Рад, что смог помочь. :)
Привет, большое спасибо за вашу помощь. Я ввел весь код и изменения, которые вы предложили, но по какой-то причине он не работает. Я связал js на внешнем листе, а также включил библиотеку jquery в раздел заголовка. Единственное изменение, которое я видел, когда я щелкаю за пределами div «userList», кнопка выхода отключается, потому что я добавил класс .btn-action для кнопки выхода в целях тестирования. Разделы не выделяются, а кнопки не активируются.