2010-01-29 30 views
9

Sử dụng đoạn mã sauThiết lập giá trị của một hộp văn bản tự động tạo ra với jQuery

var newDiv = $(document.createElement("div")); 
var newTextBox; 

newTextBox = $(document.createElement("input")) 
    .attr("type", "text") 
    .attr("id", "textbox") 
    .attr("name", "textbox"); 

newTextBox.val("text"); 
newDiv.append(newTextBox); 
alert(newDiv.html()); 

tôi nhận được sau

<input name="textbox" id="textbox" type="text"> 

tôi nhận được điều tương tự với

$("#textbox").val("test"); 

Sử dụng

newTextBox = $("<input/>"); 

Không giúp được

Giá trị của tôi ở đâu?

EDIT: SOLTUION

Vì vậy, tiếp tục lên trong ngăn xếp tôi đã chuyển đổi DOM tôi đã xây dựng thành một chuỗi và vì - như nhai cần chú ý - giá trị động không được thêm vào thẻ, nó không xuất hiện.

Thanks for the help

+0

làm thế nào về chaining '.attr ('value', 'text') 'trong khai báo? Trình quản lý sau không hoạt động trước khi bạn đã tiêm đối tượng vào DOM. –

+0

Tôi đã thử nhiều thứ để làm việc này, thật thú vị, nó không có. Các đề xuất của @ nikc cũng như @ TiuTalk đều không tạo ra sự khác biệt. Tôi tò mò. – karim79

+0

Thật thú vị bởi vì nếu tôi làm một cảnh báo (newTextBox.val()); nó cho thấy giá trị chính xác trước và sau khi tiêm nó vào div – Mason

Trả lời

9

jQuery sẽ không đưa giá trị vào các yếu tố tạo của tạo html. Cả hai .attr('value', 'blah').val() nhận giá trị hiện tại của những gì được nhập hoặc thay đổi trong đầu vào văn bản và cho phép bạn thấy giá trị đó khi bạn xem đầu vào trên trang hoặc gửi đến máy chủ. Tuy nhiên, bạn sẽ không nhìn thấy nó khi nhìn vào html.

Bạn vẫn có thể thao tác các giá trị tất cả các bạn muốn, bạn chỉ sẽ không thấy bất kỳ thay đổi trong con đom đóm, như bạn làm với những thay đổi lớp, phong cách, vv

AFAIK, điều này là như nhau mà không sử dụng jQuery. Điều tương tự cũng xảy ra với:

document.getElementById('textbox').value = 'my text'; 

Thuộc tính giá trị chỉ để đặt giá trị của một cái gì đó từ máy chủ. Nó không cần thiết với javascript.

Ngoài ra, tùy thuộc vào loại đầu vào bạn đang sử dụng. Ví dụ, bạn sẽ thấy các thay đổi thuộc tính value với một đầu vào ẩn, nhưng không phải với hộp văn bản.

EDIT:

Bằng cách thêm newDiv vào phần thân, hộp văn bản và giá trị hiển thị bằng mã của bạn. Here's a test page. Bạn có thể thấy cả mã và bản xem trước những gì sẽ xảy ra. Mặc dù cảnh báo không hiển thị bất kỳ thuộc tính 'giá trị' nào vì các lý do được giải thích ở trên.

+0

Vì vậy, sau đó nó không thể tự động tạo ra một hộp văn bản và thiết lập giá trị trong nó và có nó hiển thị cho người dùng (thông qua DOM, rõ ràng chuỗi nối sẽ làm việc)? – Mason

+0

Giá trị sẽ luôn hiển thị cho người dùng đang xem hộp văn bản. Bạn sẽ không thấy giá trị khi xem html. Lý do bạn không thấy bất kỳ đầu ra được tạo ra nào là bởi vì bạn không thêm newDiv vào một phần tử hiện tại trên trang, ví dụ: 'cơ thể') ... xem bản sửa đổi cho câu trả lời của tôi – munch

+0

http://jsbin.com/ayoca/3 - công trình này, có? – JonathanK

1
var newDiv = $(document.createElement("div")); 

var newTextBox = $('<input />') 
    .attr("type", "text") 
    .attr("id", "textbox") 
    .attr("name", "textbox") 
    .val("my text"); // <-- You can use here... 

newTextBox.val("my text"); // <-- or here 
newDiv.append(newTextBox); 
alert(newDiv.html()); 
+0

Không ... vẫn không thấy giá trị khi được đặt – Mason

+0

Thử: cảnh báo ($ ("# textbox"). Html()); –

+0

Điều đó mang lại cho tôi giá trị phù hợp nhưng không phải là rất hữu ích vì tôi đang cố gắng đưa nó vào DOM. Tôi đã chưng cất việc sử dụng thực tế của mình vào ví dụ đơn giản nhất có thể. Chỉnh sửa: nó sẽ là $ ("# textbox"). Val()) vì nó là một đầu vào nhưng tôi hiểu ý của bạn là gì. – Mason

0

Với một hack ít bạn có thể làm điều đó ..

var newDiv = $('<div/>'); 
var newTextBox; 

newTextBox = $('<input/>') 
    .attr("type", "hidden") 
    .attr("id", "textbox") 
    .attr("name", "textbox"); 

newTextBox.val("text"); 
newDiv.append(newTextBox); 
newTextBox.each(function(){this.type='text';}); 
alert(newDiv.html()); 

1st xác định loại của nó như là ẩn, vì điều này sẽ cho phép các thuộc tính giá trị, và sau đó sử dụng nó thay đổi mã văn bản ..

1
$("#element")[0].setAttribute("value","newvalue"); 
0

Người ta cũng có thể làm được điều này

var chip = document.createElement("div"); chip.innerHTML="some value here" card.appendChild(chip)

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