Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Открытие окна и запись (https://javascript.ru/forum/misc/58304-otkrytie-okna-i-zapis.html)

aleksandr8i 14.09.2015 20:27

Открытие окна и запись
 
Доброго времени суток всем и хорошего вам настроения ;)

Вообщем моя задача, вот она: при нажатии на кнопку взять текст со страницы из div id="title" и div id="text" открыть другую страницу сайта в том же окне и добавить к уже имеющимуся контенту html код с текстом из div id="title" и div id="text"

<script type="text/javascript">
 
function show() {
/*Здесь открываеться Popup, а нужно в том же окне
myWindow=window.open('','','width=200,height=100')
/*Здесь с помощью дом ищем id и берем текст потом пишем в попап, а надо текст писать в div="message"
myWindow.document.write(document.getElementById('val').value)
/*здесь окно popup браузеру делаеться активным, в мойм варианте это /*вообще думаю не нужно :)
myWindow.focus();
}
</script>
 


<div id="val">1234</div>
<button onclick='show()'>OK</button>


Помогите сделать(понять) как реализовать.

nesnayka 15.09.2015 00:27

Вариантов масса. Смотря что вы хотите сделать.
1. затолкать содержимое блоков в куку.
2. -/- в local storage.
3. передать на следующую страницу как переменную в get или post запросе.
4. отправить на сервер, спрятать содержимое в сессионную переменную, на следующей странице прочитать.
5. отправить на сервер, спрятать содержимое блоков в файл и прочитать его (файла) содержимое на новой странице.
Ну это основные методы. Можно придумать и что-то более извращенное.
Описывайте, для чего вам понадобилось содержимое блоков на другой странице, что там за содержимое и решим, что вам подходит больше.

aleksandr8i 15.09.2015 07:53

когда пользователь нажмёт на кнопку он переходит на страницу с формой где оставляет ФИО, контактный номер и емаил. Рядом с формой нужно показать содержимое блоков предыдущей странице, для того чтобы пользователь понимал что он заказывает, а главное потом содержимое блоков отправить с данными ФИО, тел, емаил.

На данный момент сделал через get отправляю данные просто подставив их в ссылку title=Cтатика&text=Дом

Вот так извлекаю данные:
<script type="text/javascript">
    
    var data = location.search.substring(1).split('&');

        while(d = data.shift()) {

            d = d.split('=');

	        s = 'Key: ' + d[0] + ', Value: ' + d[1] + '<br>';
	    }
	    document.getElementById('name').innerHTML = decodeURI(s); 
        
    </script>

Но почему то за место двух переменных обрабатывается одна, и еще нужно значения из переменных разбить по input(ам) т.е поместить первое значение в input value="Дом" с id="adres" второе в input value="Cтатика" с id="title"

laimas 15.09.2015 08:03

Цитата:

Сообщение от aleksandr8i
Рядом с формой нужно показать содержимое блоков предыдущей странице, для того чтобы пользователь понимал что он заказывает

А что есть заказ и чем он определяется?

aleksandr8i 15.09.2015 09:23

Цитата:

Сообщение от laimas (Сообщение 388655)
А что есть заказ и чем он определяется?

заказ это аренда некого предмета. C помощью get передается только текст название и короткое описание. Название и короткое описание по большому счету нужно именно менеджеру который будет общаться с клиентом, что б менеджер уже знал что нужно заказчику.

laimas 15.09.2015 09:58

Цитата:

Сообщение от aleksandr8i
заказ это аренда некого предмета. C помощью get передается только текст название и короткое описание.

Ну и где же содержаться описание этих предметов и как они идентифицируются?

nesnayka 15.09.2015 12:23

aleksandr8i,
laimas имеет в виду, что если параметры "некоего предмета" содержатся в БД, то на "следующую страницу" вам достаточно в скрытое поле get-ом передать ID этого предмета из БД, а при отправке письма в РНР скрипте вытянуть все нужные параметры по этому идентификатору и вставить их в тело письма, которое придет к менеджеру.

laimas 15.09.2015 12:58

nesnayka, вот спасибо :D

nesnayka 15.09.2015 16:38

laimas,
Ну, судя по ответу на этот ваш вопрос: "А что есть заказ и чем он определяется?", - человек не понял, чего от него хотят. )
Вышло что-то из разряда:
- Хочу кнопку на странице.
- Какую кнопку?
- Зеленую и квадратную.
- Какой функционал кнопки?
- Чтобы страницу открывала.
- Какую страницу?
- Ту, которую мне нужно открыть.

laimas 15.09.2015 16:55

Цитата:

Сообщение от nesnayka
Ну, судя по ответу на этот ваш вопрос: "А что есть заказ и чем он определяется?"

Все может быть, но и подсказка не всегда полезна. Гораздо полезнее заставить задуматься, и если не будет результата, тогда может быть и легкий пинок :)

aleksandr8i 16.09.2015 00:35

Цитата:

Сообщение от nesnayka (Сообщение 388690)
aleksandr8i,
laimas имеет в виду, что если параметры "некоего предмета" содержатся в БД, то на "следующую страницу" вам достаточно в скрытое поле get-ом передать ID этого предмета из БД, а при отправке письма в РНР скрипте вытянуть все нужные параметры по этому идентификатору и вставить их в тело письма, которое придет к менеджеру.

параметры в бд не хранятся. Есть страница в которую интегрирована яндекс карта с мощью апи. Думаю многие знакомы с возможностью размещения на яндекс карте своих объектов, при нажатии на этот самый объект всплывает balloon с содержимым. Вот содержимое balloon мне нужно передать с помощью get на другую страницу сайта, где есть форма, поместить содержимое balloon,
первое значение в input value="Дом" с id="adres" второе в input value="Cтатика" с id="title"

Вот так выглядит ссылка с которой берутся значения site.ru/?title=значеие1&text=значение2

вот так выглядт форма:
<form action="/form" method="post" enctype="multipart/form-data" id="order">
<div class="xinput">
	<label for="title">Значение2</label>
	<input kl_virtual_keyboard_secure_input="on" name="adres" id="adres" value="" type="text">
    </div>
<div class="xinput">
	<label for="text2">Значение1</label>
	<input kl_virtual_keyboard_secure_input="on" name="title" id="title" value="" type="text">
    </div>
<div class="xinput">
	<label for="email">*Email</label>
	<input kl_virtual_keyboard_secure_input="on" name="email" id="email" value="" type="text">
    </div>
<div class="xinput">
	<label for="imia">Имя</label>
	<input kl_virtual_keyboard_secure_input="on" name="imia" id="imia" value="" type="text">
    </div>
<div class="input" style="display:none;">
	<input kl_virtual_keyboard_secure_input="on" name="captcha" value="" type="text">
</div>
<div class="submit">
	<input value="c841a093397c245c1c7c2083f467a176" name="cms_token" type="hidden">  	<input value="Отправить" type="submit">
</div>
</form>


С работы только пришёл... ;)

laimas 16.09.2015 00:56

Цитата:

Сообщение от aleksandr8i
Вот так выглядит ссылка с которой берутся значения site.ru/?title=значеие1&text=значение2

Чтобы их взять они там должны быть. То есть, либо вы эти параметры передаете на сервер, храните их в сессии под ключами, которые сами определяете, и можно будет в любое время их получить. Либо никуда их не передавать, а запомнить в куках на клиенте (localStorage - можно, но если что-то не так, ваш мусор может остаться на клиенте, что не есть хорошо). Либо передаете на сервер, не сохраняя на нем, а возвращая назад, так как после запроса вы же сразу открываете форму.
Если же отказаться от window.open(), что будет лучше, тем более не нужно будет ни переходов между страницами, ни передачи параметров на сервер, а только запрос доп. данных для формы, которая будет создана на клиенте, ну или отдана уже готовая с последующей вставкой в нее данных объекта.

nesnayka 16.09.2015 01:33

Цитата:

Сообщение от aleksandr8i
Есть страница в которую интегрирована яндекс карта с мощью апи. Думаю многие знакомы с возможностью размещения на яндекс карте своих объектов, при нажатии на этот самый объект всплывает balloon с содержимым. Вот содержимое balloon мне нужно передать с помощью get на другую страницу сайта, где есть форма

А может проще открыть эту форму не на новой странице, а в pop-up'е на той же? Потом отправить ее аяксом и уведомить пользователя о том что все ок или все пропало.
Так не катит?

aleksandr8i 16.09.2015 10:40

Цитата:

Сообщение от laimas (Сообщение 388788)
Чтобы их взять они там должны быть. То есть, либо вы эти параметры передаете на сервер, храните их в сессии под ключами, которые сами определяете, и можно будет в любое время их получить. Либо никуда их не передавать, а запомнить в куках на клиенте (localStorage - можно, но если что-то не так, ваш мусор может остаться на клиенте, что не есть хорошо). Либо передаете на сервер, не сохраняя на нем, а возвращая назад, так как после запроса вы же сразу открываете форму.
Если же отказаться от window.open(), что будет лучше, тем более не нужно будет ни переходов между страницами, ни передачи параметров на сервер, а только запрос доп. данных для формы, которая будет создана на клиенте, ну или отдана уже готовая с последующей вставкой в нее данных объекта.

Может я вас до конца не понимаю, но мне кажется вы усложняете для меня задачу, думаю это связано с тем что вы давно программируете а я так любитель... :) ну да ладно.

Меня полностью устаревает то что передаются значения по ссылке, тот скрипт который выше выкладывался делает почти то что мне нужно вот на скрине посмотрите, результат. Все что бы я хотел это что бы этот скрипт обрабатывал не одно значение, а все. А после помешал значение в input value"значение1" | input value"значение2". Просто что бы пользователю попав на страницу с формой не нужно было писать самому эти значения: input value"значение1" | input value"значение2"
http://i.imgur.com/WUAo99l.jpg?1

Может я не очень понятно изъясняюсь, прошу прощения если это так. И прощу помочь мне дописать скрипт.

aleksandr8i 16.09.2015 10:47

Цитата:

Сообщение от nesnayka (Сообщение 388789)
А может проще открыть эту форму не на новой странице, а в pop-up'е на той же? Потом отправить ее аяксом и уведомить пользователя о том что все ок или все пропало.
Так не катит?

Нет, проще перенаправлять пользователя на новую страницу.

nesnayka 16.09.2015 12:00

aleksandr8i,
Т.е, значения value1 и value2 у вас уже есть и они передаются в ссылке? Вы просто не знаете как их вытянуть из адресной строки. Так?

laimas 16.09.2015 12:22

Цитата:

Сообщение от aleksandr8i
Может я вас до конца не понимаю, но мне кажется вы усложняете для меня задачу


Ну это как посмотреть. Заказчики также считают, что иметь в базе значения типа "2nd", "4nd", "6nd", ... это простота, а иметь нормальный список значений, который к тому же исключает "человеческий фактор", это усложнение.

window.open() имеет один существенный недостаток, это окно не обязательно сверху всех, такое поведение можно было сделать только в покойном NN. window.open() лучше уж тогда заменить на iframe, если иного не хотите, и это только кажется, что будет сложно, на самом же деле все упрощается.

Мое дело предложить, ваше отказаться, как хотите.

aleksandr8i 16.09.2015 12:40

Цитата:

Сообщение от laimas (Сообщение 388826)
Ну это как посмотреть. Заказчики также считают, что иметь в базе значения типа "2nd", "4nd", "6nd", ... это простота, а иметь нормальный список значений, который к тому же исключает "человеческий фактор", это усложнение.

window.open() имеет один существенный недостаток, это окно не обязательно сверху всех, такое поведение можно было сделать только в покойном NN. window.open() лучше уж тогда заменить на iframe, если иного не хотите, и это только кажется, что будет сложно, на самом же деле все упрощается.

Мое дело предложить, ваше отказаться, как хотите.

Не придал я почему-то значение, тому что вы в предыдущих сообщениях писали про window.open() - забудьте про эту функцию ;) Я извиняюсь что я сразу вам этого не сказал :) Вообще забудьте про первое сообщение(первый скрипт) :) Извиняюсь и еще раз извиняюсь...

после сообщения nesnayka я понял что есть варианты гораздо проще и нашёл скрипт который делает то что мне нужно и выложил его сюда во втором сообщении.
А пользователя я перенаправляю на другую страницу просто, с помощью ссылки вот такого вида:
<a href="/feedback?title=значение1&text=значение2" class="g-btn_l">Заказать</a>

Как видите здесь нет не каких popup окон.



На данный момент сделал через get отправляю данные просто подставив их в ссылку title=Cтатика&text=Дом

Вот так извлекаю значения уже на странице c формой:

<script type="text/javascript">
	    var data = location.search.substring(1).split('&');
	        while(d = data.shift()) {
	            d = d.split('=');
	            s = 'Key: ' + d[0] + ', Value: ' + d[1] + '<br>';

	        }
	        document.getElementById('name').innerHTML = decodeURI(s);
	    </script>


Но почему то за место двух переменных обрабатывается одна, и еще нужно значения из переменных разбить по input(ам) т.е поместить первое значение в input value="Дом" с id="adres" второе в input value="Cтатика" с id="title"

laimas 16.09.2015 12:51

enctype="multipart/form-data" - это лишнее, как и лишнее var data = location.search.substring(1).split('&'); и т.д..

Какой язык на вашем сервере?

PS. И не name="imia", а name="name" :)

aleksandr8i 16.09.2015 12:53

php

aleksandr8i 16.09.2015 13:03

Цитата:

Сообщение от laimas
enctype="multipart/form-data"

Данный код был скопирован из браузера
в исходном файле это выглядит так <form class="g-form-m g-form-m_main" action="{site_url('feedback')}" method="post">
Цитата:

Сообщение от laimas
PS. И не name="imia", а name="name"

Понятно ;) Просто есть модуль который создает нужные поля для формы а это "imia" генерируется в зависимости от названия самого поля :) Ох и глазастый вы :)

laimas 16.09.2015 13:08

Ну так какие проблемы. Вы передаете на адрес /feedback два GET параметра, title и text. На севере они будут доступны в массиве $_GET:

if($_GET AND $_GET = array_diff(array_map('htmlspecialchars', array_map('trim', $_GET)), array('')) AND count($_GET)==2) { 
    //если этот обработчик принимает только эти два параметра
    //здесь формируем форму, в которую и вставляем $_GET['title'] и $_GET['text']
    //как значения в соответствующие ее поля, и отдаем форму пользователю
    //то есть выводим страницу    
}

laimas 16.09.2015 13:10

Цитата:

Сообщение от aleksandr8i
а это "imia" генерируется в зависимости от названия самого поля


Это не имя, среди чинного name="title" imia как жаргон четкого пацанчика ), да и адрес пишется address.

aleksandr8i 16.09.2015 13:51

laimas, спасибо большое ;)

nesnayka 16.09.2015 14:13

aleksandr8i,
Т.к. эти данные никуда не вставляются (SQL-запрос и т.п.), а просто передаются на страницу, то можете еще проще написать:
<?php $_GET = array_diff(array_map('htmlspecialchars', array_map('trim', $_GET)), array('')); ?>
...
<input value="<?=$_GET['title']; ?>" .../>
<input value="<?=$_GET['text']; ?>" .../>
....

laimas 16.09.2015 14:21

Не за что, так как это упрощенный пример, а в реальности вам нужно ответить гораздо на больше вопросов при приеме данных, нежели тех, что приписаны в условии: достоверность ключей, либо, и что обязательно, их значений. Добавление на карту объектов, это смотря каких, и коли добавили свои, то их не только Яшка должен хранить в своем справочнике, но и вы должны вести учет их, но как, если у вас ничего и не где не храниться. Что же мне мешает вам прислать два значения - "Привед", "Медвед", и ваш администратор или кто-то иной это схвает.

А если есть ошибки, то это уже диалог клиент-сервер, а это уже напрямую касается вопроса "да вы все усложняете". За кажущейся простотой могут скрывать большие проблемы.

laimas 16.09.2015 14:23

Цитата:

Сообщение от nesnayka
Т.к. эти данные никуда не вставляются (SQL-запрос и т.п.), а просто передаются на страницу, то можете еще проще написать:


А вы попробуйте так делать, до первой XSS атаки может и попрет, а там дай бог задумаетесь. И запомните обязательное золотое правило - сервер обязан проверять все данные пришедшие извне, хоть там на клиенте вплоть до нижнего белья их проверяли. Проверять нужно все. Безопасность не тот вопрос, в котором "проще значит лучше". К тому же вот такая безобидная вставка < может испортить все

nesnayka 16.09.2015 14:43

laimas,
Ну безобидная вставка "<" , '"' и даже "><iframe src=..." ничего не сделает в данном случае, т.к. все из адресной строки вставляется в value input'а.
А вообще, да, я в курсе. ))

laimas 16.09.2015 15:20

А в курсе, значит и базарить нечего об этом.


Часовой пояс GMT +3, время: 06:10.