Jquery Onclick не происходит во второй раз - PullRequest
3 голосов
/ 01 сентября 2009

Я немного смущен тем, почему это не работает; Я предполагаю, что, поскольку я добавляю класс, а он не добавляется обратно в коллекцию, я не уверен.

Здесь он находится на jsbin http://jsbin.com/ayije, хотя код ниже также.

В любом случае, я могу получить действие только один раз.

<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js" type="text/javascript"></script>
        <script type="text/javascript" charset="utf-8">
        $(document).ready(function () {
            $('.optional').click(function () {
                $(this).removeClass('optional').addClass('selected');
                return false;
            }); 
            $('.selected').click(function () {
                $(this).removeClass('selected').addClass('rejected');
                return false;
            });
            $('.rejected').click(function () {
                $(this).removeClass('rejected').addClass('optional');
                return false;
            });
        });
        </script>
    </head>
    <body>
        <style>
            a {padding:2px;color:white;}
            .optional {background-color:blue;}
            .selected {background-color:green;}
            .rejected {background-color:red;}
        </style>


        <div id="tagContainer"> 
        <a href="#" class="rejected">a</a>
        <a href="#" class="optional"">b</a>
        <a href="#" class="selected">c</a>
    </div>
    </body>
</html>

Ответы [ 4 ]

4 голосов
/ 01 сентября 2009

Не уверен, если вы уже знаете об этом или нет .... Проверьте документацию jquery для функции .live () . Таким образом, вы могли бы сделать что-то вроде этого.

$('.optional').live('click', function () {
                $(this).removeClass('optional').addClass('selected');
                return false;
            });

И тогда вам не нужно беспокоиться о классах, не существующих при загрузке документа. Когда классы изменятся в элементах, они будут автоматически связаны с.

3 голосов
/ 01 сентября 2009

Это потому, что обработчики кликов применяются только к тем элементам, которые совпадают при загрузке документа. Вы должны использовать отдельный класс для идентификации всех ссылок, затем настроить обработчик одного клика, который просматривает класс, который имеет ссылка, а затем выполняет соответствующее преобразование класса.

$(document).ready(function () {
    $('.clickable').click(function () {
       var $this = $(this);
       if ($this.hasClass('optional')) {
           $this.removeClass('optional').addClass('selected');
       }
       else if ($this.hasClass('selected')) {
            $this.removeClass('selected').addClass('rejected');
       }
       else if ($this.hasClass('rejected')) {
            $this.removeClass('rejected').addClass('optional');
       }
       return false;
    });
});


<div id="tagContainer"> 
    <a href="#" class="clickable rejected">a</a>
    <a href="#" class="clickable optional">b</a>
    <a href="#" class="clickable selected">c</a>
</div>
2 голосов
/ 13 июня 2014

Вы можете изменить свой код следующим образом

$(document).on("click", ".clickable", function(){
       var $this = $(this);
       if ($this.hasClass('optional')) {
           $this.removeClass('optional').addClass('selected');
       }
       else if ($this.hasClass('selected')) {
            $this.removeClass('selected').addClass('rejected');
       }
       else if ($this.hasClass('rejected')) {
            $this.removeClass('rejected').addClass('optional');
       }
       return false;    
});
0 голосов
/ 01 сентября 2009

Вы также можете изменить свой обработчик кликов на обработчик живого клика:

$(document).ready(function () {
        $('.optional').live('click',function () {
            $(this).removeClass('optional').addClass('selected');               return false;
        });
        $('.selected').live('click',function () {
            $(this).removeClass('selected').addClass('rejected');               return false;
        });
        $('.rejected').live('click',function () {
            $(this).removeClass('rejected').addClass('optional'); 
        });
    });
...