2011-12-13 48 views
20

Có thể lấy giá trị ban đầu của trường nhập biểu mẫu không?JQuery: Nhận giá trị nhập ban đầu

Ví dụ:

<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" 

Tuy nhiên, nếu người dùng sau đó thay đổi nội dung của các lĩnh vực đầu vào #one hai, html sẽ vẫn giống nhau (với một là giá trị) nhưng JQuery các cuộc gọi ở trên sẽ trả về hai.

JSFiddle để chơi với: http://jsfiddle.net/WRKHk/

Tôi nghĩ rằng điều này vẫn phải có khả năng nhận được giá trị ban đầu, kể từ khi chúng tôi có thể gọi document.forms["formId"].reset() để thiết lập lại các hình thức trạng thái ban đầu.

+2

'$ (this).get (0) 'là một cách vô lý để viết 'this' ... bạn * thực sự * không cần phải sử dụng jQuery ở đây': P' –

Trả lời

13

Yếu tố DOM có thuộc tính "giá trị" mà bạn có thể truy cập bằng cách:

element.getAttribute('value'); 

... mà có thể khác nhau từ những yếu tố tài sảnvalue.

Demo

Lưu ý rằng bạn có thể gọi .setAttribute('value', 'new value') mà thực sự sẽ ảnh hưởng đến bất kỳ form.reset() đó được gọi là sau.

+0

Tuyệt vời - cảm ơn, đây là chính xác những gì tôi đã có trong tâm trí! –

+1

@David Nhưng tại sao không '$ (this) .attr ('value')' trả về giống như 'this.getAttribute ('value')'? Tôi nghĩ rằng nó nên ... –

+0

@ RightSaidFred Bạn có nghĩa là nó là một lỗi? Tôi thấy khó tin. Phương thức 'attr()' đã tồn tại trong một thời gian dài. Tất cả các lỗi nên được loại bỏ ngay bây giờ. Phải có một lý do hợp lệ tại sao 'attr()' không hoàn toàn ánh xạ tới 'getAttribute()' ... –

2

HTML thay đổi. Chỉ cần công cụ nguồn xem mặc định của trình duyệt luôn hiển thị cho bạn nguồn gốc được tìm nạp từ máy chủ. Nếu bạn sử dụng một cái gì đó như Firebug, bạn sẽ có thể thấy những thay đổi động trong HTML.

Một cách để nhận giá trị ban đầu là lưu trữ nó trong một thuộc tính bổ sung ngoài 'giá trị'. Ví dụ, nếu bạn phục vụ ra HTML của bạn như:

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

Bạn luôn có thể lấy lại giá trị ban đầu bằng cách gọi:

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

+1 - một giải pháp sáng tạo, nhưng câu trả lời của @David Hedlund là câu trả lời tôi đang tìm kiếm! –

0
Save the original_values @ document.ready. 

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

Bạn có thể thử lưu trữ các giá trị trong dữ liệu. Ví dụ:

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

Và sau đó bạn có thể dễ dàng lấy nó sau này như thế này:

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

Hãy thử điều này:

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

+1 cho 'defaultValue', nhưng bạn đã quên trích xuất phần tử DOM. – RightSaidFred

+0

defaultValue ... bạn đã cho tôi :) – bondythegreat

+0

Cảm ơn, RightSaidFred. Vâng phát hiện. – 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

yếu tố đầu vào đã sở hữu được gọi là defaultValue được lưu trữ giá trị ban đầu.

Để đạt được nó thông qua jQuery, chỉ cần sử dụng .prop():

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

Updated jsFiddle - sau khi thay đổi để "hai", ở trên sẽ trở lại "một".

+1

Hoặc chỉ 'this.defaultValue' ... – Brilliand

Các vấn đề liên quan