Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Динамическое изменение значения input checkbox(JQUERY MOBILE) (https://javascript.ru/forum/dom-window/71163-dinamicheskoe-izmenenie-znacheniya-input-checkbox-jquery-mobile.html)

knx23 30.10.2017 14:50

Динамическое изменение значения input checkbox(JQUERY MOBILE)
 
Всем привет!
Кто подскажет как динамически изменять значение checkbox(JQUERY MOBILE), например, по событию из сети?

<fieldset data-role="controlgroup" id="timer_t_ur">
				<legend>Интервалы работы долива по таймеру</legend>
				<div data-role="fieldcontain">
					<label for="s_16463">(16463) Активация:</label>
					<input type="checkbox" name="s_16463" onclick="writeCheckbox(this);" id="s_16463">
				</div>
			</fieldset>


Что-то типа такого не прокатывает:
///////////////Обновляем Checkbox/////////////////////////////
		$("#s_16463").attr("checked", (checkboxRegisters['c16463'] == 'true') ? true : false);

Заранее спасибо!

ksa 30.10.2017 14:54

Цитата:

Сообщение от knx23
как динамически изменять значение checkbox

Как вариант...
<fieldset data-role="controlgroup" id="timer_t_ur">
	<legend>Интервалы работы долива по таймеру</legend>
	<div data-role="fieldcontain">
		<label for="s_16463">(16463) Активация:</label>
		<input type="checkbox" name="s_16463" id="s_16463">
	</div>
</fieldset>
<script type='text/javascript'>
document.getElementById('s_16463').checked=true;
</script>

knx23 30.10.2017 15:00

Этот вариант отрабатывает 1 раз только после обновления страницы.

Dilettante_Pro 30.10.2017 15:11

<fieldset data-role="controlgroup" id="timer_t_ur">
				<legend>Интервалы работы долива по таймеру</legend>
				<div data-role="fieldcontain">
					<label for="s_16463">(16463) Активация:</label>
					<input type="checkbox" name="s_16463" onclick="writeCheckbox(this);" id="s_16463">
				</div>
			</fieldset>
<script src='https://code.jquery.com/jquery-latest.js'></script>
<script>
var checkboxRegisters = {c16463: true};

$("#s_16463").attr("checked", checkboxRegisters['c16463']);
</script>

Скрипт должен находиться в обработчике какого-то события, которое меняет checkboxRegisters['c16463']

knx23 30.10.2017 15:26

Это примерно тоже, что и у меня, здесь http://demos.jquerymobile.com/1.1.2/...s/methods.html пишут, что после записи нужно делать "refresh", но почему-то в браузере вылазит ошибка:"Error: cannot call methods on checkboxradio prior to initialization; attempted to call method 'refresh'"

ksa 30.10.2017 16:18

Цитата:

Сообщение от knx23
Этот вариант отрабатывает 1 раз только после обновления страницы

Так ты ставь его куда хочешь и вызывай сколько тебе нужно... :D

knx23 30.10.2017 16:32

Прикол в том, что элемент checkbox не обновляется автоматически при таком подходе, только, если в ручную не перезагрузить страницу, т.е. нужно его каким то образом "встряхнуть" сделать refresh, возможно это такие особенности JQUERY MOBILE, вот в данный момент и ищу как это сделать.

Dilettante_Pro 30.10.2017 17:55

Цитата:

Сообщение от knx23
Это примерно тоже, что и у меня

Примерно то же, да не совсем: вот ваш вариант
<fieldset data-role="controlgroup" id="timer_t_ur">
				<legend>Интервалы работы долива по таймеру</legend>
				<div data-role="fieldcontain">
					<label for="s_16463">(16463) Активация:</label>
					<input type="checkbox" name="s_16463" onclick="writeCheckbox(this);" id="s_16463">
				</div>
			</fieldset>
<script src='https://code.jquery.com/jquery-latest.js'></script>
<script>
var checkboxRegisters = {c16463: true};

$("#s_16463").attr("checked", (checkboxRegisters['c16463'] == 'true') ? true : false);
</script>

- не работает, а мой (пост #4) работает

Dilettante_Pro 30.10.2017 18:14

А в цикле работает вариант с prop вместо attr
<fieldset data-role="controlgroup" id="timer_t_ur">
				<legend>Интервалы работы долива по таймеру</legend>
				<div data-role="fieldcontain">
					<label for="s_16463">(16463) Активация:</label>
					<input type="checkbox" name="s_16463" onclick="writeCheckbox(this);" id="s_16463">
				</div>
			</fieldset>
<script src='https://code.jquery.com/jquery-latest.js'></script>
<script>
var checkboxRegisters = {c16463: false};
var loop = setTimeout (function tick() {
   checkboxRegisters['c16463'] = !checkboxRegisters['c16463'];
   $("#s_16463").prop("checked", checkboxRegisters['c16463']);
    loop = setTimeout(tick, 2000);
}, 2000);
</script>

knx23 01.11.2017 13:52

Согласен, что так работает, но только ни в JQUERY MOBILE.

Dilettante_Pro 01.11.2017 15:28

Ваще без jQuery
<fieldset data-role="controlgroup" id="timer_t_ur">
				<legend>Интервалы работы долива по таймеру</legend>
				<div data-role="fieldcontain">
					<label for="s_16463">(16463) Активация:</label>
					<input type="checkbox" name="s_16463" onclick="writeCheckbox(this);" id="s_16463">
				</div>
			</fieldset>
<script>
var checkboxRegisters = {c16463: false};
var elem = document.querySelector("#s_16463");
var loop = setTimeout (function tick() {
   checkboxRegisters['c16463'] = !checkboxRegisters['c16463'];
   checkboxRegisters['c16463'] ? elem.setAttribute("checked", "checked") : elem.removeAttribute("checked");
    loop = setTimeout(tick, 2000);
}, 2000);
</script>


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