jQuery: change()

erik_1001

Registered
Здравейте. Надявам се този път проблемът ми да не е толкова сериозен, че да не можете да ми отговорите отново. :)

Имам няколко чекбокса, които са в различни елементи. Попринцип все едно са съподчинени, макар че в кода не са. Когато маркирам някой от подчинените чекбоксове, трябва автоматично да си маркира и съответния parent чекбокс. Това става с една функция, когато се изпълнява при промяна, т.е.
$(всички чекбоксове за които ще важи).change( function() {горния(parent) елемент се маркира})
По-този начин динамично маркирам горния елемент, като очаквам функцията да се пусне още веднъж, за горния елемент, защото и той се е променил и трябва да се маркира още по-горния. Да обаче това не става. Явно или функцията не иска да се изпълни веднага след собствения си край (което няма никаква логика), или .change() не е подходящ за използване в случая.
Ще се радвам ако някой ми даде някаква идея какво да правя. :)
 
Програмното променяне на свойствата на елемент не извиква автоматично onChange event-а.
Трябва ти нещо от рода на :
Код:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script>
$(document).ready(function () {
	$('input:checkbox').change(function (e) {
		var parent = $(this).prev('input:checkbox');
		if (parent) {
			parent.attr('checked', $(this).attr('checked'))
			           .trigger(e);
		}
	});
});
</script>
Grandpa <input type="checkbox" name="test" id="test-1" value="1" />
Dad <input type="checkbox" name="test" id="test-2" value="2" />
Kid <input type="checkbox" name="test" id="test-3" value="3" />
Но трябва да имаш в предвид, че има бъг при IE за onChange event-а, което показва неочаквани резултати понеже се извиква, когато излезеш от focus преди blur. Един от начините е да замениш change с click.
 

Back
Горе