onchangeイベントのタイミング

[上に] [前に] [次に]
チャペル [E-Mail] 2000/02/25(金) 19:09:12
こんばんわです。

<input>タグのonchangeイベントは、その入力欄からフォーカスが外れる、もしくはEnterキーが押された時に発生します。

これを、データ編集中に検出する事は出来ないでしょうか?

やりたい事としては、
onchange="document.forms[0].changeflag.value = 1"
というふうにデータが編集された場合にフラグを立てて、他のページに移行する際に、
”フラグが立っていたらConfirmを出して、OKが押されたらページを変更する。”
という処理を行っているのですが、
データを編集した入力欄にフォーカスを残したままページを移行しようとした場合、onchangeイベントが発生しないため、データが編集されていてもConfirmが出てきません。
これを回避する何か良い方法はないでしょうか?

よろしくお願い致します。

環境:WinNT IE5.01

Ichi 2000/02/26(土) 07:15:28
onLoadで入力欄の値を保存して、それと比較するとか。
value要素で指定した値と違ったら編集されたと判断するとか。(onLoadで動的に値を変更した場合には無効)

# 編集したということは、最初に設定した値と違うということだから
# (同じ値を入れた場合を除いて)
# うまく書けん...

andi 2000/02/26(土) 10:34:03
onSubmitの時に検知できませんか?

ちーたー 2000/02/27(日) 02:20:55
onUnLoad で最終のチェックを入れてはどうでしょう。

チャペル 2000/02/28(月) 09:16:01
レスが遅くなってすいません。
>Ichi さん
値を保存してというやり方も考えには入っていたのですが、チェックするデータの量が膨大になる可能性があったため、できれば避けたい方法です。

>andi さん
>onSubmitの時に検知できませんか?
とは、どういった方法論でしょうか?

>ちーたー さん
onUnLoadでチェックする場合、「エラーが存在したら、他ページへの移行を止める」といった処理が出来るのでしょうか?


引き続き、お願い致します。

かえる 2000/02/28(月) 11:07:31
textareaや、<input type=text>等文字入力欄にはdefaultValueプロ
パティがあります。このプロパティは項目初期値の設定、参照ができる
ので編集前の値をセットしておきます。そしてonsubmit時に現在の値と
比べることで編集の有無をチェックできます。

defaultValueは項目初期値を設定するだけなので画面上の変化はありません。同じ値をvalueにも設定するか、設定後にform.reset()を行う
ことで表示されます。
<input type=text value="default">とした場合でもdefaultValue値
は、"default"となります。

ラジオボタンやチェックボックスにはdefaultChecked、optionには
defaultSelectedがあります。

onsubmit時にチェックするには以下のようになります。
<body onload="setDefaultValue()">
<script>
function setDefaultValue(){
  form1.text1.defaultValue = 1;
  form1.text2.defaultValue = 2;
  form1.reset();
}
function check(f){
  var elms, elm;
  var update = false;
  elms = f.elements;
  for(var ix = 0; ix < elms.length; ++ix){
    elm = elms[ix];
    if(elm.type == "text" && elm.defaultValue != elm.value)
      update = true;
  }
  if( update && !confirm("message") ) return false;
}
</script>
<form name=form1 onsubmit="return check(this)">
<input type=text name=text1>
<input type=text name=text2>
<input type=submit>
</form>


onunloadイベントはキャンセル不可なので画面遷移を抑止することは出
来なかったはずです。onbeforeunload時に文字列を返してやることで
ページ遷移の確認を行うことは出来ますがあまり良い物ではないです。

チャペル 2000/02/28(月) 11:53:16
かえる さん、いつもすみません。

わけあってかえるさんのコードはそのままでは使えませんが、defaultValue を利用して問題を解決する事が出来ました。

御教授、誠にありがとうございました。
Ichiさん、andiさん、ちーたーさんもありがとうございました。

では、又の機会に・・・・。

チャペル 2000/02/28(月) 11:53:53
[[解決]]
解決マークを忘れていました。

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