2011-07-29 21 views
5

Nếu bạn đang sử dụng đầu vào hình thức võ đường và muốn có nhãn cho họ như thế:Clickable võ đường nhãn

<label for="???">Email</label> 
<input 
    type="text" 
    name="email" 
    dojoAttachPoint="email" 
    dojoType="dijit.form.TextBox" 
/> 

nhãn là không thể nhấp, vì không có cách nào để biết id của input trước nó được trả lại.

Có tồn tại một giải pháp nào khác ngoài việc hack một id trong dojo tạo ra cho phần tử đó không?

CẬP NHẬT

Nó thực sự thậm chí khó khăn hơn tôi nghĩ, vì lĩnh vực đầu vào trong võ đường được kết xuất như

<div class="dijit dijitTextBox" id="widget_dijit_form_TextBox_0"> 
    <input class="dijitReset dijitInputField" value="Χ" type="text" tabindex="-1"> 
    ... 
</div> 

và lĩnh vực đầu vào cơ bản không có một id

Trả lời

1

Bạn đã thử đưa id vào đầu vào chưa?

<label for="myIdComesHere">Email</label> 
<input 
    id="myIdComesHere" 
    type="text" 
    name="email" 
    dojoAttachPoint="email" 
    dojoType="dijit.form.TextBox" 
/> 

Nếu tôi nhớ chính xác, id này có thể được sử dụng cả hai bởi dojo.byId (để lấy domNode aka thẻ đầu vào) và bởi dijit.byId (để lấy dijit Widget chẳng hạn)

+1

Giải pháp này chỉ hoạt động cho các trường hợp đơn giản. Hãy tưởng tượng có một widget với nhãn này và nhập vào mẫu. Bây giờ nếu bạn muốn đặt một số bản sao của cùng một tiện ích này trên cùng một trang, bạn sẽ gặp rắc rối nếu bạn sử dụng id. Nói chung, bạn tránh sử dụng id và sử dụng dojoAttachPoint để tham chiếu đến cá thể cụ thể của phần tử đó từ JS. Về cơ bản nó có vẻ như dijit.form.Label bị thiếu trong thư viện có thể được đính kèm bằng dojoAttachPoint chứ không phải là id, có nghĩa là có thể là lúc để viết một dojox.form.Label;) – Karolis

+0

Vâng, "hack trong dojo id tạo ra" không phải là xấu sau đó: P – hugomg

1

Nếu bạn đang tạo biểu mẫu bên trong một tiện ích, bạn có thể sử dụng this.id để lấy id của phiên bản đó của tiện ích.

Nếu tiện ích của bạn được gọi là my.form, ID của tiện ích con sẽ là my_form_0 và sẽ tăng cho mỗi tiện ích con biểu mẫu mới được tạo.

Để tạo một ID duy nhất cho các yếu tố hình thức của bạn, sử dụng

var id = this.id + '_email'; 

'<label for="' + id + '"/>' 
'<input type="text" id="' + id + '"/>' 

Điều đó sẽ cung cấp cho bạn

<label for="my_form_0_email"/> 
<input type="text" id="my_form_0_email"/> 

Nếu bạn đang tạo đầu vào bằng cách sử dụng dijit.form.TextBox, hộp đó LUÔN LUÔN sẽ có một ID duy nhất trên trang của bạn. Phần tử dom <input> thực tế bên trong tiện ích sẽ có ID được tìm thấy bằng cách lấy ID của tiện ích con.

Nếu bạn tạo TextBox programatically, bạn có thể làm như sau:

var tb = new dijit.form.TextBox(), 
    label = dojo.create("label", {for: tb.id}); 
+0

... xem bình luận của tôi cho câu trả lời của Kernel James ... – hypno7oad

1

Nếu bạn không quan tâm đến khả năng tương thích với IE, bạn có thể đặt vào bên trong nhãn:

<label><input type=checkbox>hello</label> 
+0

hoạt động tốt cho các hộp kiểm, nhưng về đầu vào văn bản thì sao? – Karolis

+0

Quan sát sắc sảo.Hãy để đó là một bài tập cho người đọc, phải không? '' ' –

+0

Gặp vấn đề tương tự như OP. Điều này có vẻ giống như một lựa chọn đơn giản. Hạn chế duy nhất là nó trở nên khó khăn hơn để phong cách cho thiết kế hình ảnh nhất định theo cách này. Trong những trường hợp đó, moonsspoon dường như có cách tiếp cận tốt hơn. 1 cho một giải pháp trường hợp sử dụng đơn giản mặc dù – hypno7oad

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