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
[[解決]]
解決マークを忘れていました。
[上に]
[前に]
[次に]