Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> getElementById, есть проблемка( 
:(
    Опции темы
Zhenek
Дата 22.11.2009, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 31.5.2007

Репутация: нет
Всего: 1



Данный код вызываю в скрипте функцией : f_requestdata(username.value,"name_filtr");
Первым параметром передаею содержимое поля, второй ID элемента который надо внести сообщение.

Сейчас это <div id=name_filtr></div>

Тоесть например хотелось бы вызвав скрипт f_requestdata(fio.value,"fio_filtr");
Изменить уже <div id=fio_filtr></div>


Использую для АЯКС  проверки введенных значений на наличие запрещенных слов.

Код

<script>
var f_req;
var reqTimeout;
 var f_name_arg;
 var fff ;
 fff= null;
function f_loadXMLDoc(f_url) {
    f_req = null;
    if (window.XMLHttpRequest) {
        try {
            f_req = new XMLHttpRequest();
        } catch (e){}
    } else if (window.ActiveXObject) {
        try {
            f_req = new ActiveXObject('Msxml2.XMLHTTP');
        } catch (e){
            try {
                f_req = new ActiveXObject('Microsoft.XMLHTTP');
            } catch (e){}
        }
    }
 
    if (f_req) {
        f_req.onreadystatechange = f_processReqChange;
        f_req.open("GET", f_url, true);
        f_req.send(null);
        reqTimeout = setTimeout("f_req.abort();", 5000);
    } else {
        alert("Браузер не поддерживает AJAX");
    }
}
 
function f_processReqChange() {

 
    if (f_req.readyState == 4) {
        clearTimeout(reqTimeout);
 
 
        // only if "OK"  response
        if (f_req.status == 200) {
          var obbj=document.getElementById(f_name_arg);    
           obbj.innerHTML = f_req.responseText;
             
        } else {
           obbj.innerHTML = f_req.responseText;
        }
    }  
}
 

 
function f_requestdata(f_params,f_name_arg)
{
  f_loadXMLDoc('../include/filtr.php?count='+f_params);
}
</script>




если скипт такой :

Код

function f_processReqChange() {

 
    if (f_req.readyState == 4) {
        clearTimeout(reqTimeout);
 
 
        // only if "OK"  response
        if (f_req.status == 200) {
          var obbj=document.getElementById('name_filtr');    
           obbj.innerHTML = f_req.responseText;
             
        } else {
           obbj.innerHTML = f_req.responseText;
        }
    }  
}



То все работает,но тогда для каждого поля нужно создать свой скрипт а если полей 50?

Заранее спасибо.
--------------------
<удалено администрацией>
PM MAIL   Вверх
bars80080
Дата 22.11.2009, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



ну, а где собственно присвоение имени id переменной?

здесь
Цитата

function f_requestdata(f_params,f_name_arg)
скорее всего инициализируется локальная переменная для функции

попробуйте так:

Код

function f_requestdata(f_params,fid) { 
    f_name_arg = fid;

PM MAIL WWW   Вверх
IDVsbruck
Дата 23.11.2009, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 7
Всего: 22



В моем понимании, у тебя небольшое идеологическое заблуждение: не гоже скриптом распихивать полученный код. Конечно, можно было бы вместе с запросом послать также на сервер твой ID, а потом составлять сложную конструкцию для ответа и отлавливать в коллбеке ... Но зачем? - Пусть код сам себя распихивает по контейнерам, и желательно не очередью запросов, а лучше в одном - во-первых, время отправки-получения иногда соизмеримо со сременем вставки блока, но несущественно отличается при увеличении объема передаваемой информации - зачем гонять туда-сюда?, а во-вторых, браузеры в идеале поддерживают 2 параллельных асинхронных запроса - это прийдется делать либо цепочку запросов друг из друга, либо делать пул запросов.

Твой получаемый скрипт либо очень универсален и ему все равно в какой контейнер вставляться, тогда проблем нет, или он сделан под конкретный проект и конкретные страницы, тогда ты без труда можешь сопоставлять id-шники скриптам на сервере. Вот и делай сколько надо своих контейнеров в получаемом коде и в конце скрипт, который пораскидывает содержимое этих "переносных" контейнеров в твои (id-шники ты передаешь и скрипт уже знает что куда вставлять).

Задача с большим количеством контейнеров нетривиальна, поэтому удобно пользоваться фреймворками, чтобы не решать проблемы кроссбраузерности вставок, формирование запросов и обработку полученного кода (чтобы скрипт сразу выполнялся).

На практике примерно так:
- есть, скажем, 3 контейнера c id: cont_1, cont_2, cont_3;
- отправляем запрос, в который вкочаем контейнеры: "../include/filtr.php?count=" + f_params + "&conts=[cont_1, cont_2, cont_3]" - неважно как передавать, можно любым своим доступным способом;
- в качестве контейнера-получателя используем специальный див (можно скрытый), в который будет выгружаться наш код;
- на сервере формируем ответ в виде страницы:
"<div id='temp_cont_1'>
    code for container 1
</div>
<div id='temp_cont_2>
    code for container 2
</div>
<div id='temp_cont_2>
    code for container 3
</div>
<script type='text/javascript'>
    document.getElementById('cont_1').innerHTML = document.getElementById('temp_cont_1').innerHTML;
    document.getElementById('cont_2').innerHTML = document.getElementById('temp_cont_2').innerHTML;
    document.getElementById('cont_3').innerHTML = document.getElementById('temp_cont_3').innerHTML;
</script>"
- получаем код, вставляем код в наш прокси-контейнер, он выполняется и заполняются твои контейнеры;
- очищаем прокси-контейнер, чтобы не засорять ДОМ кодом.

Это сообщение отредактировал(а) IDVsbruck - 23.11.2009, 00:09
PM MAIL   Вверх
Zhenek
Дата 23.11.2009, 04:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 31.5.2007

Репутация: нет
Всего: 1



bars80080

Спс помогло.

IDVsbruck
Тоже спасибо за ответ, но да скрипт универсален.
+ я плохо знаю джаваскрипт,и сейчас встала проблема его использоания и мне пока не до идеалогических мыслей) главное сделать  smile 
--------------------
<удалено администрацией>
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0686 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.