Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как принудительно установить чекбокс в disabled (https://javascript.ru/forum/dom-window/70541-kak-prinuditelno-ustanovit-chekboks-v-disabled.html)

imedia 13.09.2017 16:31

Как принудительно установить чекбокс в disabled
 
Такая ситуация при выборе чекбокса на бекенде проверяется не привышен ли лимит и выдается сообщение, по идее после полученного сообщения должен устанавливаться чекбокс текущий в disabled но почему то не устанавливается
$('input[type="checkbox"]').change(function () {
        //посчитать сколько билетов в этой категории с включенными чекбоксами
        var checkboxes = $(this).parent('div').parent('.list-view').find('input[type=checkbox]');
        var sThisValAr = [];
        checkboxes.each(function () {
            if (this.checked) {
                sThisValAr.push($(this).val())
            }

        });
        var checkbox_length = sThisValAr.length - 1;
        $.ajax({
            type: "POST",
            url: "<?php echo Url::to(['/rest/get-tickets-limit']);?>",
            data: {id: $(this).val(), checkbox_length: checkbox_length}
        }).done(function (msg) {
            
            if (msg == 'To many tickets') {
                if ($(this).is(":checked")) {

                }
                else {
                    alert('not checked');
                    //Попадаю сюда но чекбокс становится выбранным
                    $(this).prop('disabled', true)
                }

            }
        });


    })

Nexus 13.09.2017 16:39

imedia, нужно не свойство устанавливать, а атрибут.

laimas 13.09.2017 17:05

Nexus, именно так $(this).prop('disabled', true) и надо

Dilettante_Pro 13.09.2017 17:30

imedia,
this в контексте вызова функции меняется.
Попробуйте так:
$('input[type="checkbox"]').change(function () {
        //посчитать сколько билетов в этой категории с включенными чекбоксами
        var checkboxes = $(this).parent('div').parent('.list-view').find('input[type=checkbox]');
        var sThisValAr = [];
        checkboxes.each(function () {
            if (this.checked) {
                sThisValAr.push($(this).val())
            }

        });
        var that = this;
        var checkbox_length = sThisValAr.length - 1;
        $.ajax({
            type: "POST",
            url: "<?php echo Url::to(['/rest/get-tickets-limit']);?>",
            data: {id: $(this).val(), checkbox_length: checkbox_length}
        }).done(function (msg) {
            
            if (msg == 'To many tickets') {
                if ($(that).is(":checked")) {

                }
                else {
                    alert('not checked');
                     $(that).prop('disabled', true)
                }

            }
        });


    })

Nexus 13.09.2017 17:31

laimas, оба варианта работают.
https://jsfiddle.net/ufe9t79k/

laimas 13.09.2017 17:39

Цитата:

Сообщение от Nexus
оба варианта работают.

А никто и не говорит, что не будет иной, но верное это prop, а не attr.

imedia 13.09.2017 18:41

У меня не работает .
А как сделать чтобы Самый нижний алерт вывелся после аякса а не до?
$('input[type="checkbox"]').change(function () {
        //посчитать сколько билетов в этой категории с включенными чекбоксами
        var checkboxes = $(this).parent('div').parent('.list-view').find('input[type=checkbox]');
        var sThisValAr = [];


        $.each( checkboxes, function( key, value ) {
            if (value.checked) {
                sThisValAr.push($(value).val())
            }
        });

        $(this).prop('disabled', true)
       window.ms=0;
        var checkbox_length = sThisValAr.length - 1;
        $.ajax({
            type: "POST",
            url: "<?php echo Url::to(['/rest/get-tickets-limit']);?>",
            data: {id: $(this).val(), checkbox_length: checkbox_length}
        }).done(function (msg) {

            if (msg == 'To many tickets') {
                alert(msg)
            window.ms=1;
            alert(window.ms)
            
            }

        });
//Как сделать чтобы этот алерт вывелся после аякса а не до
alert(window.ms)

    })


Часовой пояс GMT +3, время: 10:46.