Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Зависимость select и checkbox'a (https://javascript.ru/forum/jquery/12617-zavisimost-select-i-checkbox%27.html)

kolosnitsyn 26.10.2010 09:25

[РЕШЕНО] Зависимость select и checkbox'a
 
Всем привет и хорошего настроения. :)

Помогите, пожалуйста, разобраться с одной проблемой:
есть скрипт следующего вида (jQuery пользуюсь 2-й день, так что поправьте, если код нубский):
$(document).ready(function(){
	$('#c_r').change(function(){
		$('#edit-term-node-tid-depth-6  option:selected').each(function(e){$(this).removeAttr('selected');});
		if (!$(this).is(':checked')){
			$('#edit-term-node-tid-depth-6 option:first').attr('selected','selected');
		}
	});
	$('#f_a').change(function(){
		$('#edit-term-node-tid-depth-3  option:selected').each(function(e){$(this).removeAttr('selected');});
		if (!$(this).is(':checked')){
			$('#edit-term-node-tid-depth-3 option:first').attr('selected','selected');
		}
	});
	$('#sec').change(function(){
		$('#edit-term-node-tid-depth-7  option:selected').each(function(e){$(this).removeAttr('selected');});
		if (!$(this).is(':checked')){
			$('#edit-term-node-tid-depth-7 option:first').attr('selected','selected');
		}
	});
	$('#f_m').change(function(){
		$('#edit-term-node-tid-depth-1  option:selected').each(function(e){$(this).removeAttr('selected');});
		if (!$(this).is(':checked')){
			$('#edit-term-node-tid-depth-1 option:first').attr('selected','selected');
		}
	});
	$('#f_s').change(function(){
		$('#edit-term-node-tid-depth-5  option:selected').each(function(e){$(this).removeAttr('selected');});
		if (!$(this).is(':checked')){
			$('#edit-term-node-tid-depth-5 option:first').attr('selected','selected');
		}
	});
	$('#f_n').change(function(){
		$('#edit-term-node-tid-depth-2  option:selected').each(function(e){$(this).removeAttr('selected');});
		if (!$(this).is(':checked')){
			$('#edit-term-node-tid-depth-2 option:first').attr('selected','selected');
		}
	});
	$('#edit-term-node-tid-depth-6').mouseup(function(evt){
		evt = (evt) ? evt : event;
		var sel = $(this).find('option:selected');
		if (sel.length){
			$('#c_r').removeAttr('checked');
		} 
		else if (evt.ctrlKey) {
			$('#c_r').attr('checked','checked');
		}		
	});
	$('#edit-term-node-tid-depth-3').mouseup(function(evt){
		evt = (evt) ? evt : event;
		var sel = $(this).find('option:selected');
		if (sel.length){
			$('#f_a').removeAttr('checked');
		} 
		else if (evt.ctrlKey) {
			$('#f_a').attr('checked','checked');
		}		
	});
	$('#edit-term-node-tid-depth-7').mouseup(function(evt){
		evt = (evt) ? evt : event;
		var sel = $(this).find('option:selected');
		if (sel.length){
			$('#sec').removeAttr('checked');
		} 
		else if (evt.ctrlKey) {
			$('#sec').attr('checked','checked');
		}		
	});
	$('#edit-term-node-tid-depth-1').mouseup(function(evt){
		evt = (evt) ? evt : event;
		var sel = $(this).find('option:selected');
		if (sel.length){
			$('#f_m').removeAttr('checked');
		} 
		else if (evt.ctrlKey) {
			$('#f_m').attr('checked','checked');
		}		
	});
	$('#edit-term-node-tid-depth-5').mouseup(function(evt){
		evt = (evt) ? evt : event;
		var sel = $(this).find('option:selected');
		if (sel.length){
			$('#f_s').removeAttr('checked');
		} 
		else if (evt.ctrlKey) {
			$('#f_s').attr('checked','checked');
		}		
	});
	$('#edit-term-node-tid-depth-2').mouseup(function(evt){
		evt = (evt) ? evt : event;
		var sel = $(this).find('option:selected');
		if (sel.length){
			$('#f_n').removeAttr('checked');
		} 
		else if (evt.ctrlKey) {
			$('#f_n').attr('checked','checked');
		}		
	});
});


Суть проблемы в том, что скрипт отлично отрабатывает в Firefox 3.6.1.1, Google Chrome, Opera, а в IE8 не срабатывает можно сказать. Подскажете что можно предпринять?

Скрипт должен выполнять следующее:

Есть multiple селект, под ним есть чекбокс. Нужно, чтобы:
- при щелчке на селект галочка в чекбоксе снималась.
- Чтобы при нажатой клавише CTRL щелчке (для снятия выделенного элемента селекта) галочка возвращалась в чекбокс.
- При снятии галочки с чекбокса выделялся первый элемент селекта.
- При установке галочки в чекбокс - выделение в селекте снималось полностью.

Ай нид хелп...:help:

kolosnitsyn 26.10.2010 10:06

Решено путем замены change на click в первой части скрипта и замены mouseup на change во второй части скрипта.

monolithed 26.10.2010 11:02

1. $(document).ready(function(){}); можно использовать в более сокращенной нотации $(function(){});
2. evt = (evt) ? evt : event; - избавьтесь :blink:
3. #edit-term-node-tid-depth - можно один раз записать в переменную с более коротким именем идентификатор и писать только имя переменной var elem = $'(#edit-term-node-tid-depth');
а использовать в уже такой нотации: $(elem+i+'option:selected')....
i - в данном случае выполняет итерацию

Да и вообще, попытайтесь сократить код в несколько раз - это возможно


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