2011-08-05 27 views
6

Tôi có một ứng dụng được xây dựng bằng cách sử dụng jQuery (và sử dụng các công cụ jQuery-UI khác nhau).Có thể tạo phần tử khi đang di chuyển với jQuery Mobile không?

Vì một số lý do, tôi phải chuyển nó sang điện thoại thông minh/máy tính bảng và quyết định sử dụng jQuery Mobile cho điều đó (để giảm thiểu số lượng thay đổi).

Trong ứng dụng vani của tôi, tôi đã tạo một số thành phần của trang khi đang di chuyển, tùy thuộc vào tương tác của người dùng.

Ví dụ một thanh trượt có thể được tạo ra như thế (p là một đối tượng với một loạt các params):

function createSlider(p){ 
    return $("<div/>",{ 
       "id":p.id, 
       "class":p.divClass, 
      }).slider({ 
       "orientation": p.align, 
       "min":p.constraint.min, 
       "max":p.constraint.max, 
       "step":p.step, 
       "value":p.curVal, 
       "animate":"normal" 
       /*and some event handling here, but it doesn't matter*/ 
      }); 

} 

Và nó sẽ tạo ra một thanh trượt tìm kiếm tốt đẹp. Bây giờ nó trông giống như:

function createSlider(p){ 
    return $("<range/>",{ 
      "id":p.id, 
      "class":p.divClass, 
      "min":p.constraint.min, 
      "max":p.constraint.max, 
      "step":p.step, 
      "value":p.curVal, 
    }); 
} 

Nhưng khi nó được tạo ra trên bay, tất cả những thứ được thực hiện bởi jQuery Mobile trên trang tải không được thực hiện trên đó.

Có cách nào để buộc khởi tạo mà không cần viết thanh trượt trong html không?

Cảm ơn.

EDIT: Tôi tìm thấy trong doc rằng nó có thể đạt được bằng container.trigger("create"); Tuy nhiên điều này không làm việc được nêu ra.

EDIT2: Ok tạo là giải pháp.

Trả lời

4

Theo tài liệu (xem chỉnh sửa trong câu hỏi), sử dụng trigger("create") trên phần tử có chứa hoạt động.

Và để làm công việc đó, bạn cũng cần phải nhớ rằng phạm vi là một loại đầu vào và không phải là một thẻ ...

giải pháp làm việc:

function createSlider(){ 
    return $("<input/>",{ 
      "type":"range", 
      "id":"sl", 
      "min":0, 
      "max":15, 
      "step":1, 
      "value":1, 
    }); 
} 

function appendSlider(){ 
    $("#yourdiv").append(createSlider()).trigger("create"); 
} 

Là một sidenote, tài liệu cho jQuery điện thoại di động thiếu một tùy chọn tìm kiếm.

+0

Điều này không phù hợp với tôi. Nếu tôi sử dụng các .trigger ("tạo"), các dropdowns () trông lạ và cư xử bất ngờ. – Ted

0

Hãy thử gọi .page() trên vùng chứa mà nội dung đang được thêm vào. Ngoài ra, việc thêm .page() vào nội dung bạn đang quay lại cũng có thể hoạt động.

+0

Điều đó không hiệu quả. Tôi cũng đã thử kích hoạt ("tạo"); không thành công. –

+0

Bạn có thể đăng cách bạn cố gắng gọi 'page()' không? –

+0

Có bạn đi: http://jsfiddle.net/bZVmk/2/ –

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