Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Передать данные со страницы на страницу


Автор: 0Z0NE 2.5.2012, 23:12
Доброго времени суток, Уважаемые Знатоки, столкнулся со следующей задачей:

Есть страница с текстовым полем, и есть другая старница со смайлами. В интернете кое-как нарыл код:

Код

<script>
function tag_add_b(obj, str1) {
    obj.focus();
if (typeof(obj.selectionStart) == "number") {
        if (obj.selectionStart != obj.selectionEnd) {
            var start = obj.selectionStart;
            var end = obj.selectionEnd;
            s = obj.value.substr(start,end-start);
            obj.value = obj.value.substr(0, start) + str1 + s + obj.value.substr(end);
        }
        else {
            obj.value = obj.value + str1;
        }
        return true;
    }
    return false;
}
</script>
который запускается конструкцией:

Код

onClick="javascript:tag_add_b(message_send, ':aikido:')

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

P.S. Спойлер не предлагать, я сначала тоже думал что спойлером будет проще но смайлов 131 штука, это серьезная нагрузка на страницу...
P.P.S. Если можно то покажите пример сего чуда...

Автор: ksnk 2.5.2012, 23:54
Цитата(0Z0NE @  2.5.2012,  23:12 Найти цитируемый пост)
Если можно то покажите пример сего чуда...

На этом форуме. нажать на кнопку "смайлы".
Не оно?

Автор: 0Z0NE 2.5.2012, 23:58
Цитата

На этом форуме. нажать на кнопку "смайлы".

Да имено оно(при переходе к всему списку смайлов)

Автор: Aliance 3.5.2012, 15:39
Код

window.opener.tag_add_b(...)

Автор: 0Z0NE 3.5.2012, 17:42
Aliance, простите но Ваш код у меня не работает... делал так:

Старница с полем ввода:

Код

<script>
function tag_add_b(obj, str1, str2) {
    obj.focus();
if (typeof(obj.selectionStart) == "number") {
        if (obj.selectionStart != obj.selectionEnd) {
            var start = obj.selectionStart;
            var end = obj.selectionEnd;
            s = obj.value.substr(start,end-start);
            obj.value = obj.value.substr(0, start) + str1 + s + str2 + obj.value.substr(end);
        }
        else {
            obj.value = obj.value + str1 + str2;
        }
        return true;
    }
    return false;
}
</script>


Код

<form action="send.php" name="send_messag" method='post'>
<a href="../chat/smiles.html" target="_blank" onClick="popupWin = window.open(this.href, 'contacts', 'location,width=400,height=400,top=0'); popupWin.focus(); return false;">Смайлы</a>
<br />
<label for="send_messag-send">
<textarea id="message_send" name='message_send' cols="50" rows="1"></textarea>
</label>
<input type='submit' value='Отправить' />

на странице со смайлами:
Код

<td onClick="javascript:window.opener.tag_add_b('message_send', ':aikido:')"><img src="smile/aikido.gif" /></td>


Что я делаю не так?

Автор: Aliance 4.5.2012, 09:32
Ищите ошибку в синтаксисе, проверьте что выдает консоль. Все должно работать: http://jsfiddle.net/dUN6P/
Подробнее: http://forum.vingrad.ru/forum/topic-44559.html

Автор: 0Z0NE 5.5.2012, 20:04
Aliance, спасибо за ссылочки, почитал, надеюсь помогло))

Кое-как добился реакции хоть от IE 6...

для этого взял скрипт "модального окна" на JS, страница в скрипте "модального окна" отображается через фрейм, вызвать добавление из "модального окна" получилось таким вот запросом...
Код

window.parent.document.getElementById('message_send').value=':aikido:'


ну уже хоть что-то, как заставить этот код работать в нормальных браузерах?)))

P.S. пробовал включить режим отладки скриптов в опере - тишина, IE так-же повенуется без всяких пререканий...

Все, дошло, заменил parent на top и опера заработала))

Все хорошо, но как вставлять смайлы в конец строки?... ибо пользователь мог уже вести в textarea сообщение ...

как выкрутится в моем случае?

Автор: Aliance 10.5.2012, 10:13
Если документ с данной разметкой есть в сети - скиньте адрес. Либо всю разметку всех фреймов, но лучше адрес.

Автор: 0Z0NE 10.5.2012, 11:13
пока нету, но счас залью...

upd:

не нашел в правилах запрета на публикацию ссылок, если я просмотрел простите нуба)
http://h34259.srv3.test-hf.ru/message.php

P.S. хосту жить всего 2 дня осталось ... по прешествию снова тестовый акк возьму ...

P.P.S забыл сказать, работает лиш 2-й смайл с лева в верхнем ряду... хотя синтаксис вставки 1-го и 2-го смайла совершенно одинаковы О_о

Автор: Aliance 10.5.2012, 17:27
 smile о мой Бог!

При клике на смайлики 1 вообще вызывается псевдоокно, поэтому так и не будет opener`а. Его мы не рассматриваем даже
При клике на смайлики 3 действительно вызывается окно. Что мы имеем там. Я молчу про то, что onclick зачем-то на ячейке таблице, а не на картинке или ссылке. Я молчу про то, что у каждой ячейки почему-то свой обработчик. Где-то вызывается window.top - что будет ссылаться само на себя, т.к. в открытом окне нет фреймов. А где-то вызывается правильный вариант с opener только при этом зачем-то пишется псевдопротокол javascript который там совершенно не нужен, а к тому же используется document.all за что вообще руки нужно вырывать, т.к. этот динозавр времен ИЕ5 нигде более не поддерживается.

Автор: 0Z0NE 10.5.2012, 18:15
да знаю, оккуратности, рациональности ну и опыта мне явно не хватает ... smile 

вот через псевдоокно функцией window.parent.document.getElementById('message_send').value=':aikido:' получается(получалось??) добавить код смайлика в textarea... но код смайлика не добавлялся а заменял данные ... как выкрутится безпонятия... пробовал в тупую взять уже имеющийся код(коль с помощью него вышло добратся до textarea) и записать в ссылку перед вставкой смайлика(для слития потом и вставки уже всей пачкой), получалось что-то типа
Код

var text = new String();
var text = window.top.document.all.forms["send"].getElementsByName('message_send').value;

и во вставке смайла пробовал провернуть что-то типа:
Код

window.top.document.getElementById('message_send').value = text + ':aikido:'


Простите пожалуйста, да я понимаю какой это шок для специалиста... ну надо-ж как-то учится... спасибо, сейчас пойду пропробую из своих каракулей попробую поудалять javascript: smile 

upd

попробовал удалить javascript: ... ничего не вышло, переместил onClick на картинку, всеравно не работает :( капец ...

Автор: Aliance 11.5.2012, 10:11
Вот так можно дописать в конец строки.
Код

document.getElementById('elemID').value += ' :aikido:';


Псевдопротокол javascript есть смысл использовать только в тегах, где атрибут принимает url, никак не в обработчиках. Хотя вообще на данном форему можно найти пост от СеЛяВи, в котором говорится о том, что использовать такое решение не самый лучший вариант.

Потом, не нужно писать onClick, все равно что пИСать рАзнЫмИ БукОвкАмИ...

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

function add_smile(smile) {
    document.getElementById('input_id').value += ' :'+smile+':';
}


В коде окна, которое вызывается через window.open нужно написать что-то вроде такого:
Код

<td><img src="/smiles/aikido.png" onclick="opener.add_smile('aikido')" alt="" title="Добавить смайлик" /></td>
<td><img src="/smiles/trollface.png" onclick="opener.add_smile('trollface')" alt="" title="Добавить смайлик" /></td>

Автор: 0Z0NE 11.5.2012, 10:41
капец ... как-ж я туп smile капец ... Спасибо Вам Aliance за помощ, буду исправлятся...
а можно в догонку простой и понятный(но не из серии "для чайников" где триста тонн ненужного текста) учебничек по JS? Пожалуйста ...

Спасибо всем кто помогал и пытался направить на путь истинный ...

Автор: Aliance 11.5.2012, 15:26
Полезно читать прикреплённые темы ;)
http://forum.vingrad.ru/forum/topic-28420.html

Автор: 0Z0NE 11.5.2012, 16:39
ой, спасибо =)))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)