powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / назначение событий
13 сообщений из 13, страница 1 из 1
назначение событий
    #36536748
EmilRegis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте...Есть код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
$.get("http://...",{cid:li.extra},function(data){ 
	data = eval(data);
	for (var i = 1 ;i<data.length;i++){
	var ch = document.createElement("input");
	chval = data[i].value;
        ch.setAttribute('type', 'checkbox');
	ch.setAttribute('value', chval);
	ensureAddEventListener(ch);
	ch.addEventListener("click",function() {alert(chval);}, false);
	$("#checkid").append(ch);
	$("#checkid").append(data[i].text + '<br/>');
	}
},"json");
Суть в том,что посылается гет-запрос и получает данные в формате json...Из этих данных формируется список чекбоксов, что-то возникла проблема с назначением события по клику на эти чекбоксы...Если сделано как у меня, то алертом выводится только значение последнего json-овского объекта при щелчке на любом чекбоксе...
Подумав, я пришёл к выводу, что видимо chval внутри функции считается глобальной переменной и видимо поэтому так получается...
Сделал следующим образом
Код: plaintext
1.
ch.addEventListener("click",function() {alert(chval);}(chval), false);
в итоге алерт выводится при создании каждого чекбокса,а при клике на чекбоксе не выводится...
В чём я ошибся?
...
Рейтинг: 0 / 0
назначение событий
    #36536791
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EmilRegis,

потому что chval присваивается последнее data[i].value и таким остается.

Сделайте по-нормальному
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
function ChBoxClick(e) {
  e = e || window.event;
  var chb = e.target || e.srcElement;
  alert(chb.value);
}


$.get("http://...",{cid:li.extra},function(data){ 
	data = eval(data);
	for (var i = 1 ;i<data.length;i++){
	var ch = document.createElement("input");
	chval = data[i].value;
        ch.setAttribute('type', 'checkbox');
	ch.setAttribute('value', chval);
	ensureAddEventListener(ch);
	ch.onclick = ChBoxClick;
	$("#checkid").append(ch);
	$("#checkid").append(data[i].text + '<br/>');
	}
},"json");

...
Рейтинг: 0 / 0
назначение событий
    #36536857
EmilRegis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
странно, но так не выводится никаких алертов...тестю щас в IE6
...
Рейтинг: 0 / 0
назначение событий
    #36536884
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EmilRegisстранно, но так не выводится никаких алертов...тестю щас в IE6Может, type и value напрямую назначать, а не через атрибуты?
...
Рейтинг: 0 / 0
назначение событий
    #36536906
EmilRegis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет..никакой реакции...решил обрабатывать это событие jquery, но тоже не получается...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
<script>
$(document).ready(function(){
	function selectItem(li){
		$.get("http://greywolf.telenet.ru/VSEUZNAL/cg",{cid:li.extra},function(data){ 
			data = eval(data);
			for (var i = 1 ;i<data.length;i++){
				var chlab = document.createElement('label');
				var ch = document.createElement("input");
				chval = data[i].value;
				ch.type = 'checkbox';
				ch.value = chval;
				chlab.appendChild(ch);
				chlab.innerHTML += data[i].text + '<br/>';
				ensureAddEventListener(ch);
				ch.onclick = ChBoxClick;
				$("#checkid").append(chlab);
			}
		},"json");
	}	
	$("#checkid input").click(function(){
		alert( 123 );
	});
});
</script>
<div id="checkid"></div>
...
Рейтинг: 0 / 0
назначение событий
    #36536955
EmilRegis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересно...
вот так
Код: plaintext
1.
li.appendChild(ch);
работает, но чекбоксы так не подписаны, а так
Код: plaintext
1.
2.
li.appendChild(ch);
li.innerHTML += data[i].text + '<br/>';
почему-то при тынце на чекбоксике ничего не происходит
...
Рейтинг: 0 / 0
назначение событий
    #36536997
EmilRegis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в итоге сделал так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
function selectItem(li){
	$.get("http://...",{cid:li.extra},function(data){ 
		data = eval(data);
		var ul = document.createElement("ul");
		for (var i = 1 ;i<data.length;i++){
			var li = document.createElement("li");
			var ch = document.createElement("input");
			var span = document.createElement("span");
			ch.type = 'checkbox';
			ch.value = data[i].value;
			span.innerHTML =  data[i].text + '<br/>';
			li.appendChild(ch);
			li.appendChild(span);
			ul.appendChild(li);
			ch.onclick = ChBoxClick;
			$("#checkid").append(ul);
		}
	},"json");
}	
работает...но как-то мне кажется выглядит это коряво,учитывая, что использую jquery...
и так для меня и осталось непонятным, почему
Код: plaintext
1.
2.
3.
$("#checkid input").click(function(){
	alert( 123 );
});
не срабатывает
...
Рейтинг: 0 / 0
назначение событий
    #36538430
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень даже коряво ...

Судя по коду, #checkid на момент назначения события не имеет дочерних input, поэтому событие не может назначиться.

1. Если ответ получется в json, то зачем eval(data)? Если приходит массив, то data УЖЕ массив.
2. А если в data только один (1) элемент, то ждем ошибку?
3. Если используется jQuery, то почему бы не использовать его возможности?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function selectItem(li){ //зачем передавать li, а потом создавать переменную с таким же именем?
	$.get("http://...",{cid:li.extra}, function(data){ 
		var ul = $("<ul>");
		for (var i =  1 ; i < data.length; i++){ //тут точно не с  0 ?
			var li = $("<li>")
				.append($("<input type='checkbox'>").val(data[i].value).click(function(){alert(this.value)}))
				.append($("<span>").html(data[i].text + '<br/>'))
				.appendTo(ul);
			$("#checkid").append(ul); //это не надо вынести из цикла?
		}
	}, "json");
}
...
Рейтинг: 0 / 0
назначение событий
    #36538649
EmilRegis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. так eval(data) парсит json в данном случае..
2. data не может быть 1 элемент,так задумано...или ни одного, или минимум 2...
3. Я не достаточно хорошо знаю jquery, поэтому не использовал все возможности)) спасибо за подсказку


$("#checkid").append(ul); //это не надо вынести из цикла?

Да действительно, благодарю) писал на коленке практически, торопился вчера...


Судя по коду, #checkid на момент назначения события не имеет дочерних input, поэтому событие не может назначиться.

А можно как-то назначать событие с помощью jquery, чтобы оно срабатывало, даже если изначально нету инпутов?
...
Рейтинг: 0 / 0
назначение событий
    #36538663
EmilRegis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EmilRegis
А можно как-то назначать событие с помощью jquery, чтобы оно срабатывало, даже если изначально нету инпутов?
имею ввиду назначить вот как-то так
Код: plaintext
1.
2.
3.
$("#checkid input").click(function(){
	alert( 123 );
});
а не прилепляя к каждому элементу в функции
...
Рейтинг: 0 / 0
назначение событий
    #36538891
EmilRegis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. так eval(data) парсит json в данном случае..

извиняюсь, глупость сказал)
...
Рейтинг: 0 / 0
назначение событий
    #36539280
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EmilRegisEmilRegis
А можно как-то назначать событие с помощью jquery, чтобы оно срабатывало, даже если изначально нету инпутов?
имею ввиду назначить вот как-то так
Код: plaintext
1.
2.
3.
$("#checkid input").click(function(){
	alert( 123 );
});
а не прилепляя к каждому элементу в функции
Ага, можно:
Код: plaintext
1.
2.
$("#checkid input").live("click", function(){
	alert( 123 );
});
Единственное, что смущает - так назначится событие только инпуту, находящемуся непосредственно под #checkid, если же инпут у потомка этого элемента или еще глубже, то лучше использовать такую структуру:
Код: plaintext
1.
2.
$("#checkid").find("input").live("click", function(){
	alert( 123 );
});
...
Рейтинг: 0 / 0
назначение событий
    #36539362
EmilRegis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, то что нужно...врядли думаю нужно будет потомков дива проверять на наличие инпута, но учту)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / назначение событий
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]