Как отключить кнопку отправки при снятии флажка?

У меня есть что-то здесь, которое, похоже, не помогает мне отключить кнопку отправки. любые идеи?

<input type="checkbox" checked="checked" id="checky"><a href="#">terms and conditions</a>
<input type="submit" id="postme" value="submit">

$('#checky').click(function(){
    if($(this).checked == false){
         $('#postme').attr("disabled","disabled");   
    } else {
        $('#postme').removeAttr('disabled');
    }
});

Ответы

Ответ 1

Вы должны проверить атрибут checked, а не метод.

Обновлен скрипт: http://jsfiddle.net/8YBu5/7/

$('#checky').click(function(){
    if($(this).attr('checked') == false){
         $('#postme').attr("disabled","disabled");   
    } else {
        $('#postme').removeAttr('disabled');
    }
});

ИЗМЕНИТЬ

Помните, что этот код необходимо обернуть внутри $(document).ready() или положить в нижней части вашего HTML-кода, в противном случае ваш JS свяжет себя с элементами DOM, которые еще не загружены, и сбой.

Обернуть его в .ready()

<script type='text/javascript'>
$(document).ready(function(){
    $('#checky').click(function(){
        if($(this).attr('checked') == false){
             $('#postme').attr("disabled","disabled");   
        } else {
            $('#postme').removeAttr('disabled');
        }
    });
});
</script>

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

Поместите его внизу документа

<!-- some HTML -->
<script type='text/javascript'>
        $('#checky').click(function(){
            if($(this).attr('checked') == false){
                 $('#postme').attr("disabled","disabled");   
            } else {
                $('#postme').removeAttr('disabled');
            }
        });
</script>
</body>
</html>

Если вы поместите его внизу документа, вам не нужно его обертывать в .ready(), потому что javascript не будет считан, пока все остальное не загрузится. В этом методе есть повышение производительности (если у вас много JS)

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

Ответ 2

if(!$(this).is(':checked') ...

Ответ 3

До того, как jQuery 1.6 attr был в порядке, после 1.6 вы должны использовать prop.

$('#checky').click(function(){
  $('#postme').prop('checked', !$(this).checked);
})

Атрибуты и свойства - это разные вещи, но, к сожалению, jQuery потратил много времени, чтобы различать их.

Смотрите также: .prop() vs .attr()

Ответ 4

измените $(this).checked на if($(this).attr('checked') == false){

Здесь вы идете.

Ответ 5

Попробуйте этот путь

$('#checky').click(function(){

    if(this.checked == false){
         $('#postme').attr("disabled","disabled");   
    }
    else {
        $('#postme').removeAttr('disabled');
    }
});

Ответ 6

Попробуйте это

$(document).ready(function(){
                $("#postme").attr("disabled","disabled");
                    $("#checky").click(function(){
                        if($("#checky").is(":checked")){
                         $("#postme").removeAttr("disabled");   
                         }
                        else{
                            $("#postme").attr("disabled","disabled");
                            }
                    });
                })

Ответ 7

Добавьте к кнопке #postme событие click, которое проверяет, установлен ли этот флажок. Если он установлен, верните false, в противном случае верните true.

$('#postme').click( function () {
    if ( !$('#checky').attr('checked') ) {
        return false;
    }
});