С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/41: Рейтинг темы: голосов - 41, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 18

Действие по нажатию на текст из alert

13.03.2015, 16:37. Показов 7701. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Подскажите пожалуйста как реализовать такой скрипт, что он должен при нажатии на переменную login в alert запрашивать пользователя о смене ника?

JavaScript
1
2
3
4
5
6
var login = prompt('Введите имя пользователя!', '');
if (login == null) {
alert('Здравствуйте! Было приятно с Вами познакомиться.');
} else {
alert('Здравствуйте, ' + login + '!'); 
}
alert('Здравствуйте, ' + login + '!'); <- в этой строке если нажать ЛКМ на login, запросить: "Вы хотите изменить имя пользователя?".
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.03.2015, 16:37
Ответы с готовыми решениями:

Вывод разных данных в Alert по нажатию кнопки
В общем решил попробовать играть в одной азартной игре по своей системе Составил текстовый документ с цифрами(каждая с новой строки),...

Действие по нажатию клавиши
Visual c++. Есть строка и кнопка. По нажатию на кнопку, то что введено в строке добавляется в переменную. Как обеспечить сохранение данных...

Действие по нажатию на клавиатуру
Можно как-то назначить клавишу с клавиатуры для того чтобы button нажимался после ее нажатия(например клавиша Q)? помогите пожалуйста

13
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
13.03.2015, 18:31
никакие события на модальном окне, которое показывается при вызове метода alert () (а также confirm () и prompt ()), программно обработать нельзя

никак нельзя
ни в каком браузере
ни на чистом яваскрипте, ни с помощью любой из существующих js-библиотек

модальные окна реагируют только на клик по находящимся в них кнопкам (ну и в окошке метода prompt () можно ввести текст в поле ввода)

так что придумывайте иной подход,
например, используя вместо alert () всплывающий контейнер
1
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 18
13.03.2015, 18:50  [ТС]
А как реализовать такое задание:
Создайте сценарий JS, который при загрузке документа будет вызывать окно, запрашивающее имя пользователя.
Введенное имя сохранить в переменной name.
Выведите на страницу приветствие вида "Здравствуйте, name!". Если имя не введено, написать "Здравствуйте, Было приятно познакомиться".
При щелчке ЛКМ на приветствие должно появиться окно confirm, в котором содержится вопрос "Вы хотите изменить имя пользователя?", Если ответ да, то вновь вызвать окно запроса имени и соответсвтвующим образом изменить имя пользователя на странице.

Дело в том, что мы проходили только alert, propmt, onclick. И замудренного не учили больше, поэтому реализовать пытался так, ничего сущного не смог найти, скажите как можно реализовать данный скрипт?
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
13.03.2015, 20:39
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(function (window,document) {
    window.UserInput = document.createElement('div');
    UserInput.setAttribute('style', "position: fixed;top: " + window.innerHeight / 2 + "px;border-radius : 10px;padding: 10px;left:" + window.innerWidth / 2 + "px;background: red;")
 
    UserInput.innerHTML = "Введите имя: <input type='search' onkeydown='UserIn(event)' id='UserIn'>";
    document.body.appendChild(UserInput);
})(window,document);
function UserIn(e) {
    if(e.keyCode==13){
        window.user=e.target.value||'приятно было познакомится';
        UserShow()
        UserInput.setAttribute('oncontextmenu', 'UserChange();return false;');
    }
}
function UserChange() {
    user=prompt('Вы хотите изменить имя') || 'приятно было познакомится';
    UserShow()
}
function UserShow() {
    if(typeof user == 'string'){
        UserInput.innerHTML='Здравствуйте, '+user+'!';
    }
}
это всё ставишь в конце страницы
1
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 18
13.03.2015, 20:48  [ТС]
Спасибо) Но при нажатии на приветствие не вылезает окошко confirm для изменения имени(

Добавлено через 1 минуту
и этого мы вообще не проходили что самое обидно( Не засчитает, завтра спрошу преподавателя как реализовать. Попробует объяснить. Выложу сюда. Всем кто дал ответы СПАСИБО!)
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
14.03.2015, 01:18
Лучший ответ Сообщение было отмечено SnapSh0t как решение

Решение

а про alert () в задании ничего нет -- это вы сами придумали
как я понимаю, приветствие "Здравствуйте, Было приятно познакомиться" должно быть написано прямо на странице, и вот когда клиент кликнет ЛКМ по этому приветствию на странице, и должно появиться окошко confirm ()

так что всё просто
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=windows-1251">
<title></title>
<script>
function prinT ()
{
var txt = prompt ('Введите ваше имя', '');
if (txt) txt = ', ' + txt; else txt = '';
document.write ('<u');
if (!txt) document.write (' onclick="if (confirm (\'Вы хотите изменить имя пользователя?\')) prinT ()"');
document.write ('>');
document.write ('Здравствуйте' + txt + '. Было приятно познакомиться</u>');
}
prinT ();
</script>
</head>
<body>
 
</body>
</html>
1
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 18
14.03.2015, 06:03  [ТС]
Да, спасибо) так и нужно было сделать)

Добавлено через 3 минуты
Можно еще узнать, почему когда меняю ник, пропадает цвет фона и цвет текста? и все становится по дефолту?
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
14.03.2015, 12:19
Цитата Сообщение от SnapSh0t Посмотреть сообщение
Можно еще узнать, почему когда меняю ник, пропадает цвет фона и цвет текста? и все становится по дефолту?
метод document.write (что-то), который используется в функции prinT () в двух разных случаях работает по-разному

на ещё НЕсформированной странице этот метод ДОПИСЫВАЕТ к тому, что имеется на странице, это самое что-то
а вот когда страница уже сформировалась, метод document.write (что-то) полностью ПЕРЕПИСЫВАЕТ страницу, заменяя всё, что на ней имеется, на что-то


при первом запуске (см. строку #16 кода) функции prinT () ваша страница ещё не сформирована и поэтому текст "Здравствуйте..." дописывается на страницу, не трогая всего остального на странице и после этого формирование страницы завершено
а вот при втором вызове (см. строку #12 кода) функции prinT () новый текст "Здравствуйте..." становится единственным на странице, всё остальное, включая фоны и цвета текста, уничтожается

поэтому использовать метод document.write () на уже сформированных страницах нельзя
динамически изменять уже сформированные страницы надо DOM-методами (например, менять содержимое тегов через свойство innerHTML)... но этого вы ещё явно не проходили

так что... лучше всего уберите ваши фоны и цвета текста, изначально сделайте всё по дефолту
1
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 18
14.03.2015, 14:13  [ТС]
Спасибо) Все понял)
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
14.03.2015, 15:33
Цитата Сообщение от kalabuni Посмотреть сообщение
менять содержимое тегов через свойство innerHTML
А ещё лучше, не использовать запись в свойства, приводящие к парсингу HTML-кода, а работать через
JavaScript
1
node1.appendChild(DOMElement);
и подобные. Заодно не слетают слушатели ивентов и связи с кодом, если были настроены.
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
14.03.2015, 15:59
FraidZZ,
Джон Резиг (автор любимой здесь многими js-библиотеки Query) когда-то писал, что innerHTML работает значительно быстрее любого другого DOM-метода... так что... если важна скорость рендеринга изменений на странице, то этот метод - самое то

разумеется, для задачи ТС скорость вовсе непринципиальна... но я не к нему и обращаюсь
0
14.03.2015, 17:25

Не по теме:

kalabuni, а речь таки шла не о скорости, а об эффекте - innerHTML перезаписывает элемент, в котором его изменили.

А DOM-методы скорее хирургическое вмешательство, не рушащее структуру - представьте, что у Вас в скрипте есть биндинги к отдельным элементам именно как к объектам HTMLElement, а не их селекторам - тогда и появляется необходимость в подобных манипуляциях...

Добавлено через 22 минуты

Цитата Сообщение от kalabuni Посмотреть сообщение
innerHTML работает значительно быстрее любого другого DOM-метода...
Не поверил сначала, и был относительно прав. Впрочем, innerHTML можно добавить одним скопом за раз - возможно, это окажется сопоставимо по скорости с прямым вызовом appendChild.

Тест:
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
<html>
    <head>
        <title>innerHTML += vs appendChild</title>
        <script>
            window.addEventListener("load", function (){
                var iHTMLstarted = new Date();
                for (var i = 0; i < 1e3; ++i) document.body.innerHTML += "<p></p>";
                var iHTMLfinished = new Date();
                
                document.body.innerHTML = "";
                
                var apChildStarted = new Date();
                for (var i = 0; i < 1e5; ++i) document.body.appendChild(document.createElement("p"));
                var apChildFinished = new Date();
                
                document.body.innerHTML = "";
                document.body.style.display = "";
                
                document.body.appendChild(document.createTextNode("innerHTML changing 1e3 times: " + (iHTMLfinished - iHTMLstarted) + "ms, ~" + ((iHTMLfinished - iHTMLstarted)/1e3) + "ms per change"));
                document.body.appendChild(document.createElement("br"));
                document.body.appendChild(document.createTextNode("appendChild changing 1e5 times: " + (apChildFinished - apChildStarted) + "ms, ~" + ((apChildFinished - apChildStarted)/1e5) + "ms per change"));
            }, false)
        </script>
    </head>
    <body style="display: none">
    </body>
</html>
Результат:
innerHTML changing 1e3 times: 695ms, ~0.695ms per change
appendChild changing 1e5 times: 155ms, ~0.00155ms per change
Как видите, весовые категории разные на два порядка с хвостиком :)

0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
14.03.2015, 18:10
вы неправы -- перечитайте:
-- во-первых, я лишь цитировал утверждение Джона Резига, а вы своим цитированием приписали его слова лично мне
-- во-вторых, писал я не о скорости исполнения кода, а о скорости рендеринга изменений на странице, т.е. сравнивал время, которое пройдет после исполнения команды до момента, когда это изменение реально будет видно на странице

попробуйте написать простейший скрипт для проверки: кнопка и два контейнера
клик по кнопке запускает функцию, которая:
1) очищает оба контейнера
2) помещает в оба контейнера новый, и одинаковый HTML-код
при этом в первом контейнере удаление и создание происходит путём изменения значения свойства innerHTML контейнера
а во втором контейнере существующий HTML-код удаляется методом removeNode (), а новый HTML-код создаётся методами createElement () и createTextNode (), который потом помещается в контейнер методом appendChild ()

когда напишете, отключите интернет, очистите компьютер и его оперативку так, чтобы в диспетчере задач запускался только браузер и какая-то программа для записи видео с экрана типа бандикама (и минимум служебных программ Windows)

нажимая несколько десятков раз кнопку, запишите происходящее в видеофайл, а потом обработайте этот файл в каком-нить видеоредакторе с целью выявить - в каком из контейнеров стабильно раньше появляется новый HTML-код, а в каком - стабильно позже

я этим как-то занимался, нужда заставила... но результаты эксперимента получил противоречивые, потому я слова Резига лишь цитирую, но не утверждаю это лично
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
19.03.2015, 14:25
FraidZZ,
я почти так и сделал
сначала создал "свой" alert
а потом делал что захочится)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.03.2015, 14:25
Помогаю со студенческими работами здесь

Действие по нажатию на ссылку
Вообщем всем привет. Помогите пожалуйста разобраться с проблемой. Надо при нажатии на ссылку вывести сообщение. ...

Действие по нажатию кнопки
Всех приветствую. У меня в приложении формы есть кнопка, которая отвечает за начало действия, представляющее собой долгий цикл. И мне нужно...

Действие по нажатию на кнопку
Приветствую. Есть проект на ASP Net (VS 10), в ней одна html-ка - форма обратной связи. Код формы: &lt;!DOCTYPE html...

Назначить действие по нажатию на картинку
нужно создать следующую программу: в паскале при нажитии на картинку( ну можно и, например, фигуру) в переменной а присваивалось значение...

Действие по нажатию клавиши (не работает)
по идее - если нажать w ,то круг сдвинется вправо,а если s,то влево,но он не сдвигается вообще. Если удрать проверку нажатия s,то всё...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru