onChange
イベントで関数を呼び出すテキストフィールドがあります。そのテキストフィールドの値が変更されたときに、ここに確認ウィンドウをスローしています。 (確認ウィンドウで)キャンセルをクリックすると、古い値をテキストフィールドに戻す必要があります。 [続行]または[OK]をクリックすると、新しい値が保持されます。私は長い間これを試してきましたが、古い値を保持することができません。
例:onchangeの前は、テキストフィールドのval = 'first'; onChangeイベント、valが「second」に変更され、ウィンドウが開くことを確認します。「ok」を選択したテキストフィールドにはsecondが必要であり、cancelを選択した場合は「first」がテキストフィールドに表示されます。
function onChangeOfValue(input){
//var oldValue = document.getElementById(input).value;
document.getElementById(input).onchange = function(){
var newValue = this.value;
alert("newVal is--->"+newValue);
if(document.getElementById(input) != null && document.getElementById(input) != ''
&& !confirm("Do you want to continue?")){
// this.input=oldValue;
return false;
}
}
}
フォームコントロールには、(驚くべきことに)デフォルト値であるdefaultValueプロパティがあることに注意してください。このプロパティを使用して、入力の前の値を格納したり、値を前の値に戻したりすることができます。
したがって、与えられた提案をまとめると、次の関数は要素への参照を渡され、ユーザーに現在の値を保持するかどうかを尋ねます。はいと答えた場合、入力のdefaultValueは現在のvalueに設定されます。ユーザーが「いいえ」(つまりキャンセル)と言った場合、値はデフォルト値にリセットされます。
このアプローチでは、入力の元のvalueが上書きされるため、フォームをリセットすると、入力のvalueが現在のdefaultValueにリセットされることに注意してください。 =。
<script>
function onChangeOfValue(element) {
var oldValue = element.defaultValue;
var newValue = element.value;
if (window.confirm('do you really want to change the value to ' + newValue + '?')) {
element.defaultValue = newValue;
} else {
element.value = element.defaultValue;
}
}
</script>
<input onchange="onChangeOfValue(this);">
このアプローチは、同じページとフォーム内の任意の数の入力に対して機能します。
最後の値を追跡するためにクロージャを使用します。
(function(){
var oldValue = document.getElementById(input).value;
document.getElementById(input).onchange = function(){
var newValue = this.value;
alert("newVal is--->"+newValue);
if(document.getElementById(input) != null
&& document.getElementById(input) != ''
&& !confirm("Do you want to continue?")){
this.value = oldValue;
return false;
} else {
oldValue = this.value;
}
};
})();