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


Автор: Riccon 27.9.2004, 15:22
Помогите. Нужно передать строку в вновое, заданных размеров, окно.
Данные имеют символы в русской кодировке.

Автор: korob2001 27.9.2004, 16:11
Попробуй этот код:
Код
<html>
<head>
 <title>Тест</title>
  <script language="JavaScript" defer type="text/javascript">
   <!--//
     function sendName() {
              var name = document.forms[0].elements[0].value;
              var winObj = window.open("", "", "width=300 height=250");
              winObj.document.write("<html><body>");
              winObj.document.write("<h2>Привет, " + name + "!</h2><br><br><center><form>");
              winObj.document.write("<input type='button' value='Закрыть' onClick='window.close()'>");
              winObj.document.write("</form></center></body></html>");
              winObj.document.close();
     }
   //-->
  </script>
</head>
<body>
 <form>
  Укажите ваше имя:
  <input type="text" size="25">
  <input type="button" value="Передать данные" onClick="sendName()">
 </form>
</body>
</html>

Если я не правельно понял, то опиши проблему подробнее.

Удачи.

Автор: Aliance 27.9.2004, 16:22
Для доступа к новому окну служит такой метод:
newWind.document, где newWind - второй парамерт, передаваемый сценарием, при генерации окна. Дальше - как обычно, допустим, в новое онко тебе нужно поместить возраст человека, заполневшего поле в главном окне, делается это так:
Код

newWind.document.getElementById("txt").value = opener.documents.forms["myForm"].age.value


В главном окне должна быть форма myForm, у нее должно быть текстовое поле age
В дочернем окне - должно быть текстовое поле txt

Всё ;)


Добавлено @ 16:24
korob2001
Ты создаешь контент в генерируемом окне, а задача: передать строку в в новое окно

Автор: Sardar 28.9.2004, 00:08
Riccon а вообще почему появился вопрос? Где были трудности? Браузер хранит строки в памяти в юникоде, с русским проблем не будет.

Автор: Riccon 28.9.2004, 11:28
Блин, я не правиьно сформулировал вопос.
Данные передаются в строке url формой методом GET.



Добавлено @ 11:29
korob2001, а как переменную name можно присвоить php-переменной нового окна.

Автор: Се ля ви 28.9.2004, 11:34
тогда используй функцию escape() и unescape() для преобразования русского текста в url-формат при запросе. escape преобразует в этот формат - т.е. русский текст передаёшь этолй функции в качестве параметра и получаешь вариант, приемлемый для записи в URL, а unescape() - для приёма на другой стороне, ей передаёшь абракадабру и она возвращает исходный текст :-)

Автор: Riccon 28.9.2004, 11:43
Я в java ни в зуб ногой, если можно, примерчик чиркните какой-нить! Плиз.

Автор: Riccon 28.9.2004, 12:19
Пришлось решать проблему при помощи пхп, хотя всё-равно интересно, как escape юзать.
Спасибо всем за помощь.

Автор: korob2001 28.9.2004, 17:03
Попробуй этот код:
Код

<html>
<head>
 <title>Пример</title>
  <script language="JavaScript" defer type="text/javascript">
   <!--//
     /*
       Следующая функция будет выдёргивать
       строку из текстового поля и перекодировать
       её в формат приемлемый для перередачи
       параметров в URL методом GET
     */
     function incodingStr() {
              // Выуживаем строку из текстового поля
              var str = document.forms[0].elements[0].value;
              // Перекодируем строку
              var incStr = escape( str );
              // Результат выводим в тоже поле
              document.forms[0].elements[0].value = incStr;
     }

     /*
       Следующая функция будет прекодировать
       закодированную строку в четабедбный вид.
       Результат будет показан в томже поле.
       Здесь, в теле функции, все дейсвия аналогичны
       действиям в функции выше, потому коментариев
       не будет.
     */
     function decodingStr() {
              var str = document.forms[0].elements[0].value;
              var decStr = unescape( str );
              document.forms[0].elements[0].value = decStr;
     }
  //-->
 </script>
</head>
<body>
 <form>
 <b>Укажите ваше имя: </b>
 <input type="text" size="60"><hr>
 <input type="button" value="Закодировать" onClick="incodingStr()">
 <input type="button" value="Раскодировать" onClick="decodingStr()">
 </form>
</body>
</html>

А что касается передечи параметров серверному приложению, то помоему для этого есть, в JavaScript, метод submit() и GET(). Но так как я и сам не очень силён в JavaScript, то ничем большим помочь не могу.
Может кто другой подскажет? Мне тоже будет интересно.

Удачи.

Автор: Aliance 28.9.2004, 18:25
Цитата(korob2001 @ 28.9.2004, 17:03)
var str = document.forms[0].elements[0].value;

Используется 2 раза - можно сделать и глобальной...

Автор: Sardar 28.9.2004, 21:47
Цитата(korob2001 @ 28.9.2004, 16:03)
var str = document.forms[0].elements[0].value;

Не стоит обращатся по индексам, лучше по именам: document.forms["formname"].elements["elname"].value;
Aliance подобная оптимизация даст прирост производительности на 0.000000.... smile.gif

Riccon передачу параметров по страницам различными способами обсуждали здесь: http://forum.vingrad.ru/index.php?showtopic=15377

Автор: Aliance 29.9.2004, 15:09
Цитата(Sardar @ 28.9.2004, 21:47)
Aliance подобная оптимизация даст прирост производительности на 0.000000....

В данном случаи - да, но нужно привыкать так делать, ведь при написании огромного сценария - это реально поможет, как минимум, сократить его запись smile.gif

Автор: korob2001 29.9.2004, 19:59
Цитата

Используется 2 раза - можно сделать и глобальной...

Не знаю как ты, а я сначала пишу код и только потом его оптимизирую. В данном случае, вопрос был не о том как оптимизировать код, вот я и привёл челу пример, по понятнее. И использование глобальных переменных нужно там, где оно нужно. Если уж на то пошло, то давай себе представим такой пример:
Чел запускает пример и по какимто причинам не захотел жать на кнопки.

Если переменная объявлена глобально, то на это, в данном случае уйдёт время в любом случае, а в случае с локальными переменными это время теряется только в том случае если чел нажал на кнопку. Это конечно не назовёшь потерей времени, но это я к чему? Не злоупотребляй глобальными пременными, везде есть свои плюы и минусы.

Цитата

Не стоит обращатся по индексам, лучше по именам: document.forms["formname"].elements["elname"].value;

Поясни, если не трудно. Какая разница?

Цитата

В данном случаи - да, но нужно привыкать так делать, ведь при написании огромного сценария - это реально поможет, как минимум, сократить его запись

smile.gif Поверь, как писать огромные программы я знаю.

Автор: Sardar 29.9.2004, 21:15
Глобальные переменные это всегда зло в чистом виде smile.gif

korob2001 если обращатся по индкесам, то ты зависишь от структуры документа. Представь ты добавил форму или поенял местами элементы. Обращение по имени позволяет избежать эти проблемы.

Автор: korob2001 29.9.2004, 21:35
Sardar
Понял. Ты прав, так действительно зависишь от структуры документа.
Большое спасибо.

Автор: Aliance 29.9.2004, 23:02
Цитата(Sardar @ 29.9.2004, 21:15)
Глобальные переменные это всегда зло в чистом виде

adv/tease.gif thumbs-up.gif

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