Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.09.2009, 21:44
Интересующийся
Отправить личное сообщение для Jaska Посмотреть профиль Найти все сообщения от Jaska
 
Регистрация: 21.09.2009
Сообщений: 14

Массовая обработка div'ов
Имеется html-код

<div id="GetString21"><div>
<div id="GetString22"><div>
<div id="GetString23"><div>

мне нужно получить значение id в div'e и отправить post'ом в php-скрипт, результат поместить в этот же тэг и перейти к обработке следущего.

непонятно какую функцию цеплять на $("div") чтобы она поочердно проходила по всем элеметам. буду очень признателен если поможете
Ответить с цитированием
  #2 (permalink)  
Старый 21.09.2009, 21:54
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

.each(function(){})
перебирет все элементы
Ответить с цитированием
  #3 (permalink)  
Старый 21.09.2009, 23:11
Интересующийся
Отправить личное сообщение для Jaska Посмотреть профиль Найти все сообщения от Jaska
 
Регистрация: 21.09.2009
Сообщений: 14

получился такой код:

$(document).ready(function(){
 $("div[id]").each(function(){
  var sID = $(this).attr("id");
  $.post('test.php', {'param': $(this).attr("id")}, function(data) {
   $("div#"+sID+" p").text(data)
   });
 });
});

что-то мне не нравится. пришлось в div'ы добавить тэг p и в него заполнять ответ от php скрипта. если заполнять в этот же тэг то выводится только 1-ый тэг почему то

Последний раз редактировалось Octane, 21.09.2009 в 23:14. Причина: используйте теги [html] и [js] для оформления кода
Ответить с цитированием
  #4 (permalink)  
Старый 21.09.2009, 23:21
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Замыкания

$(function(){
	$("div[id]").each(function(){
		(function(sID) {
			$.post('test.php', {'param': sID}, function(data) {
				$("div#"+sID+" p").text(data);
			});
		})($(this).attr("id"));
	});
});


Почему не послать на сервер сразу все идентификаторы в одном запросе?
Ответить с цитированием
  #5 (permalink)  
Старый 22.09.2009, 00:00
Интересующийся
Отправить личное сообщение для Jaska Посмотреть профиль Найти все сообщения от Jaska
 
Регистрация: 21.09.2009
Сообщений: 14

Спасибо большое, немного неясен код но с этим разберусь. А можно ли как нить сделать чтобы вместе $("div#"+sID+" p") было просто $("div#"+sID)? Потому что при таком раскладе показывается только верхняя строчка
Ответить с цитированием
  #6 (permalink)  
Старый 22.09.2009, 00:09
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

хотя нет, поспешил я, тут лишняя обертка не нужна

$(function(){
    $("div[id]").each(function(){


            var sID = $(this).attr("id");
            $.post('test.php', {'param': sID}, function(data) {
                $("#" + sID).text(data);
            });

    });
});


должны все div'ы обработаться, не знаю почему у вас только первая строчка показывается. Выложите на каком-нибудь сервере страничку, чтобы посмотреть.
Ответить с цитированием
  #7 (permalink)  
Старый 22.09.2009, 00:58
Интересующийся
Отправить личное сообщение для Jaska Посмотреть профиль Найти все сообщения от Jaska
 
Регистрация: 21.09.2009
Сообщений: 14

Выложить к сожалению на сервер не могу, могу только дать исходники.

index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Web PtokaX</title>
<link href="style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="test.js"></script> 
</head>
<body>
<div id="GetString21"><div>
<div id="GetBool22"><div>
<div id="GetNumber23"><div>
</body>
</html>


test.js
$(function(){
 $("div[id]").each(function(){
  var sID = $(this).attr("id");
  $.post('test.php', {'param': sID}, function(data) {
   $("#" + sID).text(data);
  });
 });
});


test.php
<?php if (isset($_POST['param'])) echo $_POST['param']; ?>


Результат
GetString21
Ответить с цитированием
  #8 (permalink)  
Старый 22.09.2009, 01:16
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от Jaska
<div id="GetString21"><div>
<div id="GetBool22"><div>
<div id="GetNumber23"><div>
У вас div'ы не закрыты, поэтому они все вложенные и уничтожаются после первого ответа от сервера.
Ответить с цитированием
  #9 (permalink)  
Старый 22.09.2009, 07:21
Интересующийся
Отправить личное сообщение для Jaska Посмотреть профиль Найти все сообщения от Jaska
 
Регистрация: 21.09.2009
Сообщений: 14

О господи, вот растяпа. Прошу прощения не заметил) спасибо!
Ответить с цитированием
  #10 (permalink)  
Старый 22.09.2009, 08:15
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Вот за что я не люблю jQuery, всегда идет работа с коллекцией элементов, даже если в ней один элемент или вообще ничего нет. В данном случая коллекция получается пустой, и действие не выполняется, при этом не возникает никаких ошибок, попробуй пойми, что не так.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка навигации браузера smmurf Events/DOM/Window 29 01.06.2009 12:16
Обработка Select Oleg_Antonov Элементы интерфейса 17 16.05.2009 03:23
Обработка событий клавиатуры MaxPayne Events/DOM/Window 26 01.05.2009 10:37
Получение и обработка параметров killer_djon Events/DOM/Window 2 04.02.2009 09:12
обработка одновременно двух клавиш клавиатуры Destrifer Events/DOM/Window 8 20.12.2008 15:25