2011-08-23 38 views
6

Tôi đang gặp sự cố khi đặt văn bản hiển thị của Nhập văn bản trên thiết bị di động jQuery. Sau đây là mã của tôiĐặt văn bản của trường nhập Jquery di động

$('#editPartyName').textinput(); 
$('#editPartyName').val(party.name); 

Các hành vi thực sự là kỳ lạ, lần đầu tiên hiển thị modal, hộp nhập văn bản là một phương thức (jquery mobile Plugin thoại đơn giản), văn bản là trong lĩnh vực đầu vào trên phương thức tốt. Tuy nhiên, lần thứ hai phương thức được hiển thị văn bản trực quan trong đầu vào sẽ biến mất. Khi tôi kiểm tra giá trị của phần tử, hãy cảnh báo ($ ('# editPartyName) .val()); Giá trị ở đó và chính xác. Văn bản sẽ không hiển thị trong phần tử. Tôi đang sử dụng JQM Beta 1. Tôi cũng đã cố gắng gắn $ ('# editPartyName'). Textinput() sau khi khai báo val().

Có ai có đề xuất nào không? Cảm ơn bạn!

+0

tôi gặp sự cố 'tạo kiểu bài đăng' khi lập trình giá trị thông qua '.val (" ")' và tìm thấy cách gọi '.focus().blur() 'đã giải quyết nó. – pstanton

Trả lời

3

Để tạo kiểu nhập văn bản jQuery Mobile bạn sử dụng .textinput() và để làm mới chế độ xem của kiểu nhập văn bản jQuery Mobile hiện có bạn sử dụng .textinput("refresh"). Vì vậy, trong các cuộc gọi tiếp theo, bạn cần sử dụng phương thức .textinput("refresh") và trên đầu vào văn bản chưa được khởi tạo mà bạn cần sử dụng .textinput().

Cái gì như:

$('#editPartyName').val(party.name).textinput('refresh'); 

Kinh nghiệm của tôi là với đầu vào chọn nhưng tôi tin rằng đó là tương tự cho đầu vào văn bản, đây là những gì tôi làm cho Selects để cập nhật xem:

$("select#foo").selectmenu("refresh"); 

này ví dụ từ tài liệu: http://jquerymobile.com/demos/1.0b1/docs/forms/forms-selects.html (dưới cùng của trang)

Cập nhật

Bạn không cần phải làm bất cứ điều gì khác hơn là thay đổi giá trị của các yếu tố đầu vào:

$('#editPartyName').val(party.name) 

Đây là một bản demo sử dụng jQuery Mobile 1.1.0: http://jsfiddle.net/VbAKL/

Và đây là một bản demo sử dụng jQuery Điện thoại di động 1.0B1: http://jsfiddle.net/VbAKL/1/

Có nhiều khả năng sự cố này được tạo vì bạn đang chọn theo ID và có thể có nhiều phiên bản ID trong DOM cùng một lúc. Các trang web jQuery Mobile có thể có nhiều "trang giả" trong DOM cùng một lúc và nếu bạn có một phần tử trong mỗi trang có ID là #header thì khi bạn cố gắng chạy một lựa chọn cho #header chỉ trường hợp đầu tiên sẽ được trả lại. Vì vậy, cuộc gọi hàm $('...').val(...) của bạn có thể hoạt động, không phải trên phần tử phù hợp.

Trả lời ngắn: đảm bảo ID của bạn là duy nhất trên tất cả các trang trong trang web của bạn khi sử dụng jQuery Mobile.

+0

Cảm ơn bài đăng Jasper, tôi đã thử các đề xuất của bạn nhưng nó không hoạt động ... Tôi không biết liệu bạn có quen thuộc với plugin thoại đơn giản hay không nhưng tôi đang tạo HTML thô (đây là nơi tôi khai báo trường nhập của mình) và đặt nó vào màn hình phương thức. Trường nhập được hiển thị chính xác nhưng tôi có lỗi tôi đã đề cập ở trên. Khi tôi đặt mã bạn đã cho tôi trên cùng một người nghe (nhấp chuột mà tuyên bố html cho phương thức và cháy nó) nó thực sự giết chết tất cả thực hiện sau $ ('# editPartyName'). Textinput ('refresh'); Tôi không chắc chắn những gì đang xảy ra ... – user906824

+0

Tài liệu jQuery Mobile không đề cập đến phương thức .textinput(). Tôi đã thử nó anyway, và có "không có phương pháp như vậy 'làm mới' cho ví dụ widget textinput" –

+0

@MaffooClock http://jquerymobile.com/demos/1.1.0/docs/forms/textinputs/methods.html. Hãy thử liên kết đó, nó mô tả phương thức '.textinput()'. Liên kết trong câu trả lời ban đầu của tôi là bản phát hành Beta đầu tiên của jQuery Mobile 1.0. – Jasper

12

Tôi cũng gặp phải vấn đề này. Tôi đã có thể thiết lập giá trị của một đầu vào văn bản với $('#some_id').val('foobar'), và sau đó in giá trị cho bàn điều khiển với console.info($('#some_id').val());, nhưng trong trình duyệt, đầu vào văn bản trống.

Sau khi chọc vào nó một lúc, tôi đã tìm ra rằng $('input[id=some_id]').val('foobar') hoạt động như mong đợi. Vì vậy, rõ ràng, có một số loại lỗi kỳ lạ với jQuery tham chiếu một phần tử bằng ID.

+2

Nếu bạn đang tham chiếu bằng một ID, hãy đảm bảo nó là duy nhất cho toàn bộ trang của bạn vì các trang giả jQuery Mobile được lưu trữ trong cùng một DOM. Vì vậy, nếu bạn đang cố gắng chọn '# header' trên một trang, nó có thể chọn' # header' trên một trang khác thay vì (với ID, cái đầu tiên tìm thấy được trả về và phần còn lại bị bỏ qua). – Jasper

+0

Trong trường hợp của tôi, không có ID trùng lặp nào. –

+0

Đó là một điều kỳ quặc điên rồ của Jquery. Cảm ơn nhiều –

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