テキストエリアでの改行コード削除

[上に] [前に] [次に]
あつし [E-Mail] 1999/11/23(火) 00:32:29
検索をかけましたが、似たような質問が発見できませんでした。よろしくお願いします。
webフォームのTEXTAREAで入力されたデータから、「改行コード」を
削除して処理(メール発信等々)することはできないでしょうか。
データベースへのインプットとする時に、改行コードが途中に入っていないデータとしたいのです。
クライアントでの処理を行いたいです。また、IE、NE両方で稼動することが希望です。

あつし 1999/11/23(火) 00:34:18
途中で送信してしまいました。
IEとNEで動かせたいので、javascriptで処理をしたいです。

Aurai [E-Mail] 1999/11/23(火) 04:47:02
function RetDeleted(targetstring) {
  if (targetstring.indexOf(unescape('%0D%0A')) > -1) rcode = unescape('%0D%0A')
  else if (targetstring.indexOf(unescape('%0A')) > -1) rcode = unescape('%0A')
  else rcode = unescape('%0D');
  i = 0;
  p = '';
  while (targetstring.indexOf(rcode,i) != -1) {
    m = targetstring.indexOf(rcode,i);
    p += targetstring.substring(i,m);
    i = m + rcode.length;
  }
  p += targetstring.substring(i,targetstring.length);
  return p;
}

value = RetDeleted(value);
のように呼び出す

あつし 1999/11/23(火) 10:10:18
情報のご提供ありがとうございました。
実は、javascriptは超初心者でして、教えていただいたソースの意味がまったくわかりません。(^^ゞ m(__)m
例えば、「どのテキストエリアか」というような指定はどうするのでしょうか。恐れ入りますが、解説をお願いできないでしょうか。m(__)m

きたむら 1999/11/23(火) 14:55:33
それでは、JavaScriptの並みの初心者である、わたくしめが説明をば。
まず<HEAD>〜</HEAD>の中で、Auraiさんの関数を定義しておきます。

そして、フォームのonSubmitで、以下のようにこの関数を呼び出します。

<FORM NAME="F" ACTION="mail.cgi" onSubmit="document.F.T.value=RetDeleted(document.F.T.value)">
<TEXTAREA NAME="T"></TEXTAREA>
<INPUT TYPE="submit">
</FORM>

これは「どのテキストエリアか」をNAMEによって指定しています。
つまり、document.F.Tというのは、"F"という名前のフォーム中にある
"T"という名前の部品(ここではテキストエリア)ということです。
文書中に出てくる順番を使って、document.forms[0].elements[0]などと
指定することも可能です。

あつし 1999/11/23(火) 21:56:20
Aurai様、きたむら様 ご指導ありがとうございます。m(__)m
<HEAD>〜</HEAD>の中で、Auraiさんの関数を定義するのは、
記載していただいたソースをそのままコピーして
利用させていただけばいいのでしょうか。
また、ACTION="mail.cgi" とコーディングされているのは、
mail.cgiというものを使った場合であって、他のもの(私の場合は、
asp)であってもかまわないんですよね。

きたむら 1999/11/24(水) 03:07:18
JavaScriptの関数定義をHTML文書中に書くときは、それ全体を
<SCRIPT>〜</SCRIPT>タグで囲む必要があります。こんな感じです。

<SCRIPT LANGUAGE="JavaScript">
<!--
ここに関数の定義を書く
// -->
</SCRIPT>

>また、ACTION="mail.cgi" とコーディングされているのは、
>mail.cgiというものを使った場合であって、他のもの(私の場合は、
>asp)であってもかまわないんですよね。

そのとおりです。"mail.cgi"の部分は適切な名前に変えてください。
ASPのことはよく知らないんですが、フォームの書き方はCGIと基本的には同じみたいです。
(違ってるなら、詳しい方フォローおねがいします)

あつし 1999/11/24(水) 08:54:20
お世話になります。何回も恐縮です。

具体的なソースを掲載させていただきます。
以下のようなソースでうまくいきませんでした。
良く理解していない状態での考えですが、2つのJavascriptが
あるからでしょうか。前半のテキストフォームの未入力
チェックはうまくいきます。


<SCRIPT LANGUAGE="JavaScript">
<!--
function kakunin() {
  if (document.form1.shozoku.value == "") {
    alert("所属が入力されていません。");
    document.form1.shozoku.focus();
    return(false);
  }
  if (document.form1.shainid.value == "") {
    alert("社員番号が入力されていません。");
    document.form1.shainid.focus();
    return(false);
  }
  return(true);
}
// -->
</SCRIPT>

<SCRIPT LANGUAGE="JavaScript">
<!--
function RetDeleted(targetstring) {
  if (targetstring.indexOf(unescape('%0D%0A')) > -1) rcode = unescape('%0D%0A')
  else if (targetstring.indexOf(unescape('%0A')) > -1) rcode = unescape('%0A')
  else rcode = unescape('%0D');
  i = 0;
  p = '';
  while (targetstring.indexOf(rcode,i) != -1) {
    m = targetstring.indexOf(rcode,i);
    p += targetstring.substring(i,m);
    i = m + rcode.length;
  }
  p += targetstring.substring(i,targetstring.length);
  return p;
}
// -->

</SCRIPT>

<FORM name="form1" ACTION="moushikomi.asp" METHOD="POST" onSubmit="return kakunin()" onSubmit="document.form1.coment.value=RetDeleted(document.form1.coment.value)">

きたむら 1999/11/25(木) 03:39:54
<SCRIPT>が2個所あるのは大丈夫です。ひっかかっているのは、たぶん onSubmit が2つあることのほうだと思います(未確認)。

onSubmitなどで複数の処理をおこなうときは、一般にセミコロン";"で区切って並べます。並べた処理は左から実行されます。たとえばあつしさんの例なら、

onSubmit="〜.value=RetDeleted(〜.value);return kakunin()"

と書けば、まず改行削除処理をおこなってから、確認ウィンドウを開きます。
ただし今回の例では、単純にセミコロンで区切って並べるより、kakunin()でオーケーになったら改行削除する、というほうが使いやすいです。
というわけで、kakunin()関数の最後の return(true) の直前に、

document.〜.value = RetDeleted(document.〜.value);

という行を入れるのがいいと思います。

あつし 1999/11/25(木) 09:12:17
[[解決]]
きたむら様ありがとうございました。m(__)m
また、他にご指導いただいた皆様、ありがとうございました。
解決いたしました。

[上に] [前に] [次に]