2010-01-21 33 views
34

Tôi có một lĩnh vực đầu vào đơn giản bên trong một thẻ có dạng:Không thể đặt giá trị ẩn trường nhập bằng cách sử dụng jQuery

<body> 
    <form action="#"> 
     <label>Input</label> 
     <input type="hidden" id="foo" name="foo" /> 

    </form> 
</body> 

Tôi cố gắng để thiết lập giá trị này từ một tập tin js:

$(document).ready(function(){ 
    $('#foo').val('foo') 
}) 

nhưng trong nguồn html thuộc tính không được đặt ở tất cả. Nếu tôi cố gắng đặt kiểu đầu vào thành "nút" hoặc bất kỳ thứ gì khác, nó hoạt động. Tôi không thể làm điều đó với trường nhập hidden. Tôi đang làm gì sai?

+5

Câu trả lời được chấp nhận không trả lời câu hỏi thực tế, mặc dù hữu ích trong việc đưa ra giải pháp. Có thể tốt hơn nếu chấp nhận câu trả lời thực sự chính xác khi câu hỏi này nhận được hơn 10 nghìn lượt xem mỗi năm. –

+0

Nó sẽ giúp ích nếu bạn cung cấp cho trường đầu vào một giá trị ban đầu? (ngay cả khi nó là một chuỗi rỗng) –

Trả lời

25

Bạn có thể lấy giá trị từ trường ẩn nếu bạn đặt thẻ val?

ví dụ:

<input type="hidden" id="foo" name="foo" value="bar" /> 

$(document).ready(function(){ 
    alert($('#foo').val()); 
}) 
+16

Chỉ cần làm rõ: tác giả đang cố gắng xem giá trị được sửa đổi bằng cách sử dụng "Xem mã nguồn". Lưu ý các thay đổi được thực hiện cho DOM động không hiển thị thông qua "Xem mã nguồn". – jjmontes

+0

có điều kỳ lạ này khi bạn cần sao chép đầu vào ẩn http://jsfiddle.net/YvBfP/ – max4ever

1

tôi cần phải nhìn thấy toàn bộ tập tin nhưng tôi đoán là một trong hai bạn không bao gồm các tập tin nguồn jQuery.js hoặc bạn có nhiều yếu tố với một ID của foo

+0

héhé ... Tôi đã có hai id cùng trong hai hình thức, và câu trả lời của bạn làm cho tôi nghĩ về việc kiểm tra này ... cảm ơn! – citraL

24

Tôi đã tìm ra. Giá trị được đặt bởi jQuery nhưng khi tôi xem nguồn, giá trị mới không được hiển thị. Tôi đã thử điều này (nhờ Fermin):

$('#foo').val('poo') 
alert($('#foo').val()) 

và hiển thị giá trị được sửa đổi.

+1

Tôi khuyên bạn nên sử dụng công cụ dev như firebug cho firefox để xem mã nguồn động dễ dàng hơn. – David

+1

Nếu Fermin trả lời câu hỏi của bạn, bạn nên đánh dấu câu hỏi đó là câu trả lời được chấp nhận. – rfunduk

+0

Plugin Nhà phát triển web của Firefox cũng có công cụ 'Xem nguồn được tạo' sẽ hiển thị nguồn với tất cả thay đổi javascript được áp dụng. –

3

Tôi cũng đã đấu tranh với điều này. Nếu bạn đặt một giá trị ban đầu nói '0', và sau đó xem DOM bằng cách sử dụng một cái gì đó như Firebug, bạn sẽ nhận thấy rằng DOM sau đó cập nhật. Vì một số lý do nếu giá trị ban đầu được đặt thành null hoặc một chuỗi rỗng, DOM không cập nhật, nhưng giá trị thực sự vẫn được lưu trữ.

Bạn có thể kiểm tra điều này bằng cách báo cho val sau khi bạn đã cài đặt nó (như đề xuất trong bài viết trước)

1

tôi đã cùng một vấn đề với một lĩnh vực đầu vào ẩn. Id i đặt giá trị ban đầu là 0, nó hoạt động tốt, nhưng đôi khi tôi không muốn có giá trị ban đầu là 0. Vì vậy, tôi đã thử nghiệm với giá trị = "", khoảng trắng và nó cũng hoạt động cho tôi. Nếu bạn điền giá trị động từ PHP, bạn có thể thực hiện value="<?= $val+0; ?>" nếu 0 là tốt cho bạn hoặc value="<?= $val; ?> " nếu khoảng trắng là tốt.

+0

có thể xác nhận. Khi khởi tạo trường nhập ẩn với "", tôi gặp sự cố khi cập nhật nó với jQuery. Khi khởi tạo nó với 0 nó làm việc cho tôi. –

2

Tôi gặp sự cố này khi POST -ing biểu mẫu của tôi và tập lệnh PHP của tôi không thể nhận được giá trị POST. Tôi đã sử dụng điều này:

$('#elemId').attr("name", theValue); 

Hy vọng điều đó sẽ hữu ích.

22

Câu trả lời hay nhất tôi tìm thấy ở dạng http://forum.jquery.com/topic/passing-value-to-hidden-form-field.

Thay vì $('#Data').val(data); đâu ID lĩnh vực ẩn là 'dữ liệu'

Sử dụng $('input[name=Data]').val(data);

trình hoàn hảo cho tôi

+3

nó hoạt động vì "Dữ liệu" ở đây là "tên" của đầu vào, không phải id. Dù sao, tôi cũng bỏ phiếu vì tôi cũng quên mất điều đó. –

0

Không ai trong số các giải pháp trên làm việc cho tôi.

tôi phải làm như sau để làm cho nó hoạt:

$('#foo').val(data).blur(); 
0

Thay sau đó initialising thuộc tính giá trị của mình với một chuỗi khởi đầu vào của bạn như thế này.

<input type="hidden" name="foo" id="foo" value="${foo}"> 

"foo" sẽ chứa giá trị mới bạn đặt.

1

Tôi biết rằng đó là đến cuối nhưng vẫn điều này có thể giúp một người nào đó .... Nếu không có công việc giải pháp trên, chỉ cần làm điều này ...

$(document).ready(function() { 
$('#foo').attr("value","foo") }); 
Các vấn đề liên quan