2011-12-13 48 views
20

フォーム入力フィールドの初期値を取得できますか?JQuery:元の入力値を取得

たとえば:ユーザが2つに#one入力フィールドの内容を変更した場合

<form action="" id="formId"> 
    <input type="text" name="one" value="one" id="one" /> 
</form> 

$("#one").attr("value"); //would output "one" 
$("#one").val();   //would output "one" 
$("#one").get(0).value; //would output "one" 

しかし、HTMLは依然として(値として一つと)同じように見えるだろうが、jQueryの上記の呼び出しは2を返します。一緒にプレイする

JSFiddle:http://jsfiddle.net/WRKHk/

私たちは元の状態にフォームをリセットするdocument.forms["formId"].reset()を呼び出すことができますので、これはまだ、orginal値を取得することが可能でなければならないと思います。

element.getAttribute('value'); 

...要素のプロパティvalueから異なっていてもよい:

+2

'$(これ)。get(0) 'は' this'を書くばかばかしい方法です...ここではjQueryを使用する必要はありません:: P' –

答えて

13

DOM要素は、あなたがしてアクセスすることができます属性「値」を持っています。

Demo

あなたが実際に後に呼び出される任意のform.reset()に影響を与えるであろう.setAttribute('value', 'new value')を呼び出すことに注意してください。

+0

優秀 - これはまさに私が心に留めていたものです! –

+1

@Davidしかし、なぜ '$(this).attr( 'value')'はthis.getAttribute( 'value') 'と同じものを返しませんか?私はそれがすべきだと思う... –

+0

@ RightSaidFredあなたはそれがバグだという意味ですか?私はそれが信じがたいことがわかります。 'attr()'メソッドはずっと前からありました。すべてのバグは今削除されているはずです。 'attr()'が 'getAttribute()'に完全に対応していない正当な理由があるはずです... –

2

HTMLが変更されます。ブラウザーのデフォルトのビューソースツールでは、サーバーからフェッチされた元のソースが常に表示されます。 Firebugのようなものを使うと、HTMLの動的な変化を見ることができます。

初期値を取得する方法の1つは、「値」に加えて追加の属性に格納することです。たとえば、あなたがHTMLのように出て役立つ場合:

<input type="text" name="one" value="one" origvalue="one" id="one" /> 

をいつでも呼び出すことによって、元の値を取り戻すことができます。

$("#one").attr("origvalue"); 
+0

+1 - 創造的な解決策ですが、@David Hedlundの答えは私が探していたものです! –

0
Save the original_values @ document.ready. 

$(function(){ 
    var original_values = $.map($('form input'), function(input){ return $(input).val() }); 
}) 
0

あなたはデータの値を格納してみてください可能性があります。たとえば、次のように

$('#one').data('val',$('#one').val()); 

そして、あなたは簡単にこのように、後でそれを取得することができます:

console.log($('#one').data('val')); 
31

はこれを試してみてください:

$("#one")[0].defaultValue; 
+0

+1は 'defaultValue'ですが、あなたはDOM要素を抽出するのを忘れてしまいました。 – RightSaidFred

+0

defaultValue ...あなたは私を得ました:) – bondythegreat

+0

ありがとう、RightSaidFred。よく目撃された。 – graphicdivine

0
var initialVal = $('#one').val(); 
alert(initialVal); 
$('#one').live("focusout", function() { 
    var attribute = $("#one").attr("value"); 
    var value = $(this).val(); 
    var get = $(this).get(0).value; 
    alert("Attribute: " + attribute + "\n\nValue: " + value + "\n\ninit val: " + initialVal +"\n\nGet: " + get); 
}); 
8

入力要素が保存されてdefaultValueというプロパティを持って元の値。

だけ.prop()を使用し、jQueryの経由で到達するために:

var value = $(this).prop("defaultValue"); 

Updated jsFiddle - に "2" に変化した後、上記の "1" を返します。

+1

または単に 'this.defaultValue' ... – Brilliand

関連する問題