Включить отключенные кнопки при нажатии div с помощью HTML, CSS, Jquery?

#css #html #button #onclick

#css #HTML #кнопка #onclick

Вопрос:

Я был бы признателен за любую помощь в решении проблемы с отключенной / включенной кнопкой, с которой я столкнулся. Я изучаю 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 {}
  

Я надеюсь, что кто-нибудь сможет мне в этом помочь! Это многому научит меня и, надеюсь, многих других людей.

Ответ №1:

Предполагая, что я правильно понял вашу проблему, тогда, возможно, что-то вроде этого подойдет:

 $('.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') amp;amp; !$(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 класс к своим кнопкам.

Комментарии:

1. Привет, большое спасибо за вашу помощь. Я ввел весь код и предложенные вами изменения, но по какой-то причине он не работает. Я связал js на внешнем листе, а также включил библиотеку jquery в раздел head. Единственное изменение, которое я видел, когда я нажимал за пределами div ‘UserList’, кнопка выхода отключается, потому что я добавил класс .btn-action к кнопке выхода для целей тестирования. DIVS не подсвечиваются, а кнопки не включаются.

2. Есть ли какие-либо ошибки консоли? Какую версию jQuery вы используете?

3. Я ссылался на это: Ошибок консоли нет.

4. Если есть ошибки консоли, пожалуйста, опубликуйте их здесь. Также попробуйте сравнить свой код со скрипкой, на которую я ссылался выше, и посмотреть, есть ли какие-либо различия.

5. Большое спасибо за ваше время. Должно быть, это ошибка newb, потому что я точно скопировал ваш код, и он все еще не работает. Должно быть, я делаю что-то не так с моим файлом .js.