是否可以使用jQuery Mobile动态创建元素?

时间:2011-08-05 14:27:15

标签: javascript jquery jquery-mobile

我有一个使用jQuery构建的应用程序(并使用各种jQuery-UI工具)。

出于某种原因,我必须将其移植到智能手机/平板电脑,并决定使用jQuery Mobile(为了尽量减少更改次数)。

在我的vanilla应用程序中,我根据用户的交互情况动态创建了页面的一些元素。

例如,可以像这样创建一个滑块(p是一个带有一串参数的对象):

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*/
           });

}

它会产生漂亮的滑块。现在看起来像:

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,
    });   
}

但是因为它是动态创建的,所以jQuery Mobile在页面加载上完成的所有工作都没有在它上面完成。

有没有办法强制初始化而不在html中编写滑块?

感谢。

编辑:我在doc中发现可以使用container.trigger("create");来实现 但是这还行不通。

EDIT2 :Ok create是解决方案。

2 个答案:

答案 0 :(得分:4)

根据文档(请参阅问题中的编辑),在包含元素上使用trigger("create")可以正常工作。

要做到这一点,你还需要记住范围是输入类型而不是标记......

工作解决方案:

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

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

作为旁注,jQuery mobile的文档缺少搜索选项。

答案 1 :(得分:0)

尝试在正在添加内容的容器上调用.page()。或者,将.page()添加到您要返回的内容中也可能有效。