Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Checked атрибут (https://javascript.ru/forum/dom-window/75990-checked-atribut.html)

SolomonRei 22.11.2018 19:25

Checked атрибут
 
Добрый день.Делаю чекбокс,если он нажат,то сумма считается с процентами,если же нет,то без него.
Вот мой код
var discount;

    $('#presents').on('click', function() {
    	alert(23);
    	var information = Number($('#calc-f-sum').val());
    	if($('#presents').prop('checked')) {
    		 $('#presents').prop('checked', false);
    		if(information != ' ') {
				discount = information
    		}
    	}else {
    		 $('#presents').prop("checked", true);
    		if(information != ' ') {
    			var discount_difference = Number((information * 2)/ 100);
				discount = Math.round(Number(information + discount_difference));
    		}
    	}
    });


    $('#calc-f-sum').change(function()
    {	
	    // $('#presents').on('click', function() {
	    // 	if($('#presents').prop('checked')) {
	    // 		$('#presents').prop('checked', false);
		   //  }else {
		   //  	$('#presents').prop('checked', true);
		   //  }
	    // });

    	discount = Number($('#calc-f-sum').val());
    	if($('#calc-f-sum').val()<=500000)
    	{
    		$('#calc-f-tar').removeAttr("disabled");
			if($('#presents').prop('checked')) {
				alert(1);
				var discount_difference = Number((discount * 2)/ 100);
				discount = Math.round(Number(discount + discount_difference));
			}else discount = $('#calc-f-sum').val();

    	}
    	else if($('#calc-f-sum').val()>500000)
    	{

    		if($('#presents').prop('checked')) {
    			var discount_difference = Number((discount * 2)/ 100);
				discount = Math.round(Number(discount + discount_difference));
			}else discount = $('#calc-f-sum').val();

    		$('#calc-f-tar').attr("disabled","disabled");
    		$("#calc-f-tar").removeAttr("checked");

    	}

    });

	$('input').change(function(e){
		e.preventDefault();
		$('#calc-result').html('');
		$.ajax({
			type: 'POST',
			url: "/post/calc",
			data: {
				sum: discount,
				type: $(":radio[name=type]").filter(":checked").val(),
				srok: $(":radio[name=srok]").filter(":checked").val(),
				tar: $('#calc-f-tar').is(':checked'),
				c1: $('#calc-f-s1').is(':checked'),
				c2: $('#calc-f-s2').is(':checked')
			},
			success: function(data) {
				$('#calc-result').html(data);
			},
			error: function(data) {

			},
			dataType: "html"
		});
	});

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

<label><input type="checkbox" id="presents" value="1" name="presents" checked="true" />2%</label></div>

Dilettante_Pro 23.11.2018 11:06

SolomonRei,
Интересно, зачем вы выворачиваете логику работы checkbox наизнанку?
$('#presents').on('click', function() {
    	alert(23);
    	var information = Number($('#calc-f-sum').val());
    	if($('#presents').prop('checked')) {
    		 $('#presents').prop('checked', false);
    		if(information != ' ') {
				discount = information
    		}
    	}else {
    		 $('#presents').prop("checked", true);
    		if(information != ' ') {
    			var discount_difference = Number((information * 2)/ 100);
				discount = Math.round(Number(information + discount_difference));
    		}
    	}
    });

Если не в обработчике клика, то checked нормально меняется.
<label><input type="checkbox" id="presents" value="1" name="presents" checked="true" />2%</label>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
$('#presents').prop('checked', false);
</script>

Корректнее использовать .attr(), но и с prop работает.

laimas 23.11.2018 13:11

Цитата:

Сообщение от Dilettante_Pro
Корректнее использовать .attr(), но и с prop работает

Для свойств как раз prop метод.

Dilettante_Pro 23.11.2018 16:16

laimas,
Ну я не знаю, но вот тут http://htmlbook.ru/html/input/checked и вот тут https://developer.mozilla.org/en-US/...input/checkbox написано, что атрибут.

laimas 23.11.2018 16:28

Dilettante_Pro, мало ли чего написано, пощелкайте флажок без всяких JQ, видно появление атрибута? :D Метод .prop() как раз для свойств, которые true/false, а .attr('name', 'чего-то').

Dilettante_Pro 23.11.2018 17:21

laimas,
Да, всячески покрутил - вы абсолютно правы:thanks:

laimas 23.11.2018 19:47

Засада не столько в установке, сколь в получении значения будет - .attr('checked') вернет строку или undefined, а .prop('checked') всегда соответствующее булево значение.


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