Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
11 / 11 / 2
Регистрация: 16.08.2009
Сообщений: 434

Скрипт меняет значение поля только с задержкой

30.04.2012, 13:51. Показов 2505. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть скрипт который должен после того как динамически сформирует поле input сразу менять его значение
Но он работает только если перед выполнением скрипта поставить задержку в виде alert(); без нее скрипт ничего не меняет

test_pr.rar в архиве два html файла
запускаете test1.html нажимаете ссылку Оpen появляется alert после нажатия ОК значение поля input меняется с 0 на 22
если за комментировать alert то поле input не меняется

КАК сделать чтобы значение поля менялось сразу и без alert ?

вот содержание файлов

test1.html
HTML5
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<script>    
//////////////////////////////////////////////////////////////////////////////////////
function izmenenie_zavisimogo_pola(){
document.getElementsByName("test")[0].value=22;
}
 
///////////////////////////////////////////////////////////////////////////////////////////
function open_list(id)
{ 
 
 var t =  document.getElementById(id)
 t.style.display==''?t.style.display='none':t.style.display='';
 
show_list();
 
alert("delay");
izmenenie_zavisimogo_pola();
    
return false
}
 
///////////////////////////////////////////////////////////////////////////////////////////
    function createRequestObject()   
    {  
        try { return new XMLHttpRequest() }  
        catch(e)   
        {  
            try { return new ActiveXObject('Msxml2.XMLHTTP') }  
            catch(e)   
            {  
                try { return new ActiveXObject('Microsoft.XMLHTTP') }  
                catch(e) { return null; }  
            }  
        }  
    } 
////////////////////////////////////////////////////////////////////////////////////////
 
///////////////////////////////////////////////////////////////////////////////////////
function show_list() {
var link='test2.html';
 
var http = createRequestObject();
 
     if(http)   
        {  
            http.open('get', link);  
            http.onreadystatechange = function ()   
            {  
            if(http.readyState == 4)   
                {  
                    document.getElementById("2").innerHTML = http.responseText;  
                            
                }  
            }  
            http.send(null);      
        }  
        else   
        {  
            document.location = link  
        }  
            
}
///////////////////////////////////////////////////////////////////////////////////
</script>
 
 
<a onclick="open_list(1);">Open+</a>
<div id="1" style='display: none;'>
<div id="2"></div>
</div>
test2.html
HTML5
1
<input type=text name="test" value="0" size=4>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.04.2012, 13:51
Ответы с готовыми решениями:

Определить, какой скрипт меняет значение поля в форме
На странице есть форма, в ней в том числе несколько скрытых полей. Значения приходят вместе с загружаемой страницей. При нажатии на кнопку...

Триггер не меняет значение только одного поля
Триггер должен считать оптовую цену(она уменьшается на 5% от начальной цены, если количество товаров больше 100) и стоимость товаров. Но...

Скрипт, который меняет значение ячейки на другое
Подскажите пожалуйста, у меня есть файл. на листе 1 есть список элементов в столбце B, на листе 2 в столбце B тот же список и в столбце С...

3
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
30.04.2012, 18:15
Причина:
Довольно распространенная ошибка новичков - непонимание асинхронности выполнения ajax-запросов. На момент, когда вы в функции izmenenie_zavisimogo_pola пытаетесь присвоить элементу значение, этот элемент еще не появился в структуре страницы. Потому что ajax-запросу нужно время на выполнение.

Решение:
Вызывать izmenenie_zavisimogo_pola в обработчике изменения состояния запроса. Там где у вас:
JavaScript
1
2
3
4
5
if(http.readyState == 4)   
                {  
                    document.getElementById("2").innerHTML = http.responseText;  
                            
                }
добавить:
JavaScript
1
2
3
4
5
if(http.readyState == 4)   
                {  
                    document.getElementById("2").innerHTML = http.responseText;  
                    izmenenie_zavisimogo_pola();    
                }
А алерт и старый вызов izmenenie_zavisimogo_pola - убрать.

Добавлено через 4 минуты
Но вообще, если вы ajax-запрос используете только для создания элемента на странице, то это совершенно неоправданная глупость.
1
11 / 11 / 2
Регистрация: 16.08.2009
Сообщений: 434
30.04.2012, 19:56  [ТС]
ostgals, все заработало!
почему глупость работает ведь ?
ну то есть какие проблемы могут быть с ajax ?
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
30.04.2012, 20:58
Цитата Сообщение от nill Посмотреть сообщение
почему глупость работает ведь ?
Есть более простые и правильные способы создавать элементы. Вот вам два примера:

HTML5
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
26
27
28
29
30
31
32
33
34
<script type="text/javascript">
 
function create_textbox_dom(node){
 
    var tb = document.createElement('input');
    
    tb.setAttribute('type', 'text');
    tb.setAttribute('name', 'test');
    tb.value = 'Создано!';
 
    node.appendChild(tb);
}
 
</script>
 
<div>
    <button onclick="create_textbox_dom(this.parentNode)">Создать текстовое поле через DOM</button>
</div>
 
<hr />
 
<script type="text/javascript">
 
function create_textbox_ihtml(node){
 
    node.innerHTML += '<input type="text" name="test" value="Создано!" />';
    
}
 
</script>
 
<div>
    <button onclick="create_textbox_ihtml(this.parentNode)">Создать текстовое поле через innerHTML</button>
</div>
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.04.2012, 20:58
Помогаю со студенческими работами здесь

Переключатель (флажок) в форме запроса, который меняет значение поля
Помогите люди добрые, мы в Access не местные. --Есть 2 связанные таблицы, есть запрос, который подтягивает данные из них. --Есть...

Оценить значение поля (выполнить php-скрипт) без перезагрузки страницы
Приветствую. Есть форма (текстовое поле в ней и две кнопки). В текстовое поле вводится ответ на некоторый вопрос, который представлен выше...

Джава скрипт, который передает значение скрытого поля с одной страницы на другую
мне нужно передать код из четырех цифр с одной страницы, где они находятся в тэге &lt;p&gt; другой странице, где их необходимо вставить в...

Как получить значение поля записи, только что внесенной в БД?
Я понимаю, что это уже где-то тут спрашивали, но я не нашел... Такая беда. Записываю в одну таблицу запись... Ей автоматом...

Вставить значение скрытого поля с формы в php скрипт, обработать его, вернуть снова в форму и отправить на сервер
Привет. Нужна помощь! Не знаю, как реализовать... Есть форма в которой расположен php скрипт, который на основе $public_key, $private_key,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru