【问题标题】:How do I tell jquery mobile to add classes to dynamically added form fields in a listview?如何告诉 jquery mobile 将类添加到列表视图中动态添加的表单字段?
【发布时间】:2012-01-12 15:28:49
【问题描述】:

我正在努力让 JQM 使用包含表单字段的列表视图重新初始化 jquery 页面。

其中一个表单元素被初始化为 JQM 正常初始化过程的一部分,即正确显示所有元素的所有正确类。

其他的都是用JQ的append动态添加的

动态添加元素时,我找不到重新初始化列表以将样式应用于所有内容的正确方法,该字段包含 div、标签和文本区域。

我已经准备了一个示例来展示我根据在 SO 和网络上发现的其他问题尝试过的重新初始化元素的不同方法。

http://jsfiddle.net/robaldred/UPsQr/

在我的示例中,第 5 行已正确初始化,但是它需要调用 fieldcontain() 方法和 textinput() 方法并手动将 ui-input-label 类添加到标签中。这感觉很麻烦,我一定是错过了什么。

【问题讨论】:

    标签: javascript jquery-mobile


    【解决方案1】:

    像这样在页面上触发创建事件:

    $("#page").trigger("create");
    

    创建与刷新:一个重要的区别

    请注意,有一个 创建事件和刷新方法之间的重要区别 一些小部件有。 create 事件适用于增强原始标记 包含一个或多个小部件。应该使用刷新方法 在已被操作的现有(已经增强的)小部件上 以编程方式,需要更新 UI 以匹配。

    例如,如果您有一个页面,其中动态附加了一个新的 页面创建后具有 data-role=listview 属性的无序列表, 在该列表的父元素上触发创建会改变它 进入列表视图样式的小部件。如果有更多的列表项 以编程方式添加,调用列表视图的刷新方法将 仅将那些新列表项更新为增强状态并离开 现有的列表项保持不变。

    参考:http://jquerymobile.com/demos/1.0/docs/pages/page-scripting.html

    更新了你的小提琴 - http://jsfiddle.net/UPsQr/2/

    【讨论】:

      【解决方案2】:

      工作示例:

      JS

      $('#add_element').click(function() {
          var list   = $('ul[data-role="listview"]');
          var nextLi = ((list.children().length) + 1);
      
          li = '<li><div data-role="fieldcontain"><label for="textarea'+nextLi+'">Input:</label><textarea id="textarea'+nextLi+'" name="textarea'+nextLi+'"></textarea></div></li>';
          list.append(li);
          list.listview('refresh');
      
          $('#page').trigger('create');
      });
      
      //$('#add_element').hide();
      

      HTML

      <html>
          <head>
          </head>
          <body>
              <div id="page" data-role="page">
                  <!-- First field is done by jQM's normal initialization -->
                  <!-- The Rest are added onload and appended to the listview -->
                  <ul data-role="listview">
                      <li>
                          <div data-role="fieldcontain">
                              <label for="textarea1">Input:</label>
                              <textarea id="textarea1" name="textarea1"></textarea>
                          </div>
                      </li>
                  </ul>
                  <a data-role="button" id="add_element">Add Fields</a>
              </div>
          </body>
      </html>
      

      注意:

      jQM 支持 jQuery 1.6.4

      【讨论】:

      • 感谢关于 jQ 1.6.4 的说明
      • 1.7 为我想要的事件处理增加了一些可取的好处,如果有些东西开始感觉坏了,我会记住 1.6.4 的要求。到目前为止我还没有发现任何问题。感谢您的回答。
      • 是的,我认为 jQM 1.1 将支持 jQuery 1.7.x
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 2015-02-14
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      相关资源
      最近更新 更多