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


Автор: Elfet 26.9.2004, 17:36
как по onsumbit заменить все "&" на "[amp]" в textarea и потом отправить это sample.gif
вот у меня неудалось -
Код
 function apmre()
 {
  var t=document.f.txt.value;
  var i;
  for(i=0; i<t.leght; i++)
  {
   if(t[i]=="&")t[i]="[amp]";
  }
 }


ЗЫ t[i]="[amp]"; так проходит? массив раздвинется? smile.gif
и ето тоже - var t=document.f.txt.value; ? sad.gif

sample.gif

Автор: Aliance 26.9.2004, 18:02
Чтобы обратиться к элементу textarea (id=txt) из формы (name=myForm), используем DOM
document.getElementById("txt"),
либо
document.myForm.txt

Непосредственно замену, думаю, можно осуществить с помощью регулярных выражений. Так же используем метод replace(), выглядит так:
Код

var searchString = "&";
var replaceString = "[amp]";
var re = new RegExp(searchString, g);
var result = resultString.replace(re, replaceString)

Автор: Sardar 26.9.2004, 19:09
Цитата(Aliance @ 26.9.2004, 17:02)
либо document.myForm.txt

Не совсем:
Код
document.forms.myForm.txt

Замена регами попроще:
Код
string.replace(/&/g, "[amp]");

Автор: Elfet 27.9.2004, 08:28
Код
<script>
 function apmre()
 {
  var g=document.forms.f.txt;
  var searchString = "&";
  var replaceString = "[amp]";
  var re = new RegExp(searchString, g);
  var result = resultString.replace(re, replaceString)
  document.forms.f.txt=result;
 }</script>

Код

<textarea name="txt" rows=25 cols=100 wrap="off"></textarea>
print "<input type="submit" value="OK" onclick="apmre();">


qstn.gif

мне выдаёт сообщение об ошибке в регулярном выражении sad.gif

sample.gif




Автор: Gold Dragon 27.9.2004, 09:44
Вот функция замены символа в строке

Код
function qqq()
{
var b = "Строка с & и & и ещё"
var a = ""
for (i=0; i<b.length; i++){
if (b.charAt([i])=="&"){a = a + "[amp]"}
else{a = a + b.charAt([i])}
}
document.write(a)
}


Цитата(Elfet @ 26.9.2004, 18:36)
for(i=0; i<t.leght; i++)

есть свойство length

Автор: Aliance 27.9.2004, 14:48
Elfet
Используй конструкцию, которую сказал Sardar
Цитата(Sardar @ 26.9.2004, 19:09)
document.forms.myForm.txt

Хм...у меня в книжке одной по другому написано, точнее и так, как ты сказал, и мой вариант, странно, но я обычно вообще W3C DOM использую biggrin.gif

Автор: GoodBoy 27.9.2004, 14:57
Попробуй вот так:
Код
<script>
function apmre() {
       var g = document.MyForm.txt;
       g.value = g.value.replace(/&/g, "[amp]");
}
</script>
<form name=MyForm ...>
...
<textarea name=txt></textarea>
...
<form>

Автор: Gold Dragon 27.9.2004, 15:10
Цитата(Sardar @ 26.9.2004, 20:09)
document.forms.myForm.txt

document - этот документ
forms - имя формы
myForm - имя элемента, в данном случае <TEXTAREA>
txt- а это что? Я не нашёл такого свойства

Автор: Aliance 27.9.2004, 16:04
Red Dragon
Name элемента. Можно обращаться так:
document.forms.elements[0] (где число в скобках - номер жлемента, начинается отсчет от нуля), либо
document.forms.elements["txt"] или
document.forms.txt

Автор: Elfet 27.9.2004, 16:54
Цитата(GoodBoy @ 27.9.2004, 15:57)
var g = document.MyForm.txt;

Цитата(GoodBoy @ 27.9.2004, 15:57)
var g = document.form.MyForm.txt;

пишет есть NULL или не является объектом smile.gif

Автор: GoodBoy 27.9.2004, 16:59
Elfet
Всё прекрасно работает!!!
Код
<script>
function apmre() {
  var g = document.MyForm.txt;
  g.value = g.value.replace(/&/g, "[amp]");
}
</script>
<form name=MyForm>

<textarea name=txt></textarea>

<form>

<input type=button value="qweqweq" onclick="apmre()">

Автор: Aliance 27.9.2004, 17:37
Elfet
GoodBoy
Может так: document.forms.myForm.txt

Автор: GoodBoy 27.9.2004, 17:52
Aliance
Код из моего предыдущего сообщения - работает! Я проверял! :-)))

Автор: Aliance 27.9.2004, 18:12
GoodBoy

Цитата(Sardar @ 26.9.2004, 19:09)
Цитата (Aliance @ 26.9.2004, 17:02)
Цитата
либо document.myForm.txt

Не совсем:
Код
document.forms.myForm.txt



Автор: Alx 27.9.2004, 21:31
forms - это коллекция
myForm - это имя формы
txt - это имя поля

можно обращаться через коллекцию document.forms.myForm.txt, либо через все объекты на странице: document.myForm.txt

по-моему лучше сделать так:

Код

<script>
function apmre()
{var txtVal = document.MyForm.txt;
var newTxtVal = txtVal.value.replace(/&/g, "[amp]");
txtVal.value = newTxtVal;
}
</script>
<form name=MyForm>

<textarea name=txt></textarea>

<form>

<input type=button value="qweqweq" onclick="apmre()">


да, но кстати. это будет заменять только одну &!

А чтобы все:

Код

function repl()
{var text = txt.value;
var newTxtVal="";
for (var i=0;i<text.length;i++)
{switch(text.charAt(i))
{case "&":newTxtVal+="[amp]";break;
default: newTxtVal+=text.charAt(i);
}
}
txt.value=newTxtVal;
}

Добавлено @ 21:32
Код

<script>
function repl()
{var text = txt.value;
var newTxtVal="";
for (var i=0;i<text.length;i++)
{switch(text.charAt(i))
{case "&":newTxtVal+="[amp]";break;
default: newTxtVal+=text.charAt(i);
}
}
txt.value=newTxtVal;
}
</script>
<body>
<textarea id="txt"></textarea>
<input type="button" onclick="repl()">

Автор: Elfet 27.9.2004, 21:51
Цитата(GoodBoy @ 27.9.2004, 18:52)
Код из моего предыдущего сообщения - работает! Я проверял! :-)))


угу, заработал, я просто у формы id на name заменил!!!!!!!! wow.gif wow.gif wow.gif wow.gif wow.gif qstn.gif omg.gif hehe.gif mad.gif biggrin.gif rolleyes.gif bored.gif smile.gif tounge.gif

Автор: Sardar 27.9.2004, 23:42
Парни, с таким простым вопросом так намудрили biggrin.gif
По порядку, document.forms.formName - это DOM(0), стар как сам JavaScript, в этой обьектной модели помимо коллекции forms имеем еще embeds, images, links и т.д.
Оборот: document.elementName тоже работает, но лучше это не использовать ибо старо и возможно в будущем будет глючно.

Замена регекспами это самый естественый выход в данной ситуации мудрить с пробегом по символам строки не надо.
Ставим регу флаг g и заменим все амперсенды.

Дуамю я поставил точку в этом вопросе smile.gif

Автор: Alx 28.9.2004, 18:57
Цитата
Ставим регу флаг g и заменим все амперсенды.

понятно.

Цитата
document.elementName

да я вообще использую просто elementName....

допустим
Код
alert(myTxt.value)

Лучше, чем
Код
alert(document.forms.myForm.elements.myTxt.value)

...

Автор: Sardar 28.9.2004, 22:44
Цитата(ALEXANDRO @ 28.9.2004, 17:57)
допустим Код alert(myTxt.value)

Допустим такая фича только в ИЕ работать будет wink.gif
И не правильно оно... с точки зрения логики и удобства, но это мое ИМXО.

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