Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.11.2018, 19:25
Аспирант
Отправить личное сообщение для SolomonRei Посмотреть профиль Найти все сообщения от SolomonRei
 
Регистрация: 05.04.2018
Сообщений: 77

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>
Ответить с цитированием
  #2 (permalink)  
Старый 23.11.2018, 11:06
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

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 работает.
Ответить с цитированием
  #3 (permalink)  
Старый 23.11.2018, 13:11
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Dilettante_Pro
Корректнее использовать .attr(), но и с prop работает
Для свойств как раз prop метод.
Ответить с цитированием
  #4 (permalink)  
Старый 23.11.2018, 16:16
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

laimas,
Ну я не знаю, но вот тут http://htmlbook.ru/html/input/checked и вот тут https://developer.mozilla.org/en-US/...input/checkbox написано, что атрибут.
Ответить с цитированием
  #5 (permalink)  
Старый 23.11.2018, 16:28
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Dilettante_Pro, мало ли чего написано, пощелкайте флажок без всяких JQ, видно появление атрибута? Метод .prop() как раз для свойств, которые true/false, а .attr('name', 'чего-то').
Ответить с цитированием
  #6 (permalink)  
Старый 23.11.2018, 17:21
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

laimas,
Да, всячески покрутил - вы абсолютно правы
Ответить с цитированием
  #7 (permalink)  
Старый 23.11.2018, 19:47
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как убрать у одного checkbox checked и присвоить тому на который кликнула nina_ Элементы интерфейса 4 14.11.2016 13:27
Не добавляется атрибут checked Takasu jQuery 8 22.06.2015 06:06
Сменить атрибут у тега img lifecom jQuery 2 03.09.2013 16:52
После события checked запустить ajax, выходит: Сначала ajax потом checked??? Андрей Лебедев Элементы интерфейса 0 09.02.2013 13:07
Атрибут "jQuery<циферки>" и IE psu jQuery 6 18.05.2009 11:55