【问题标题】:Styles not getting applied properly in dynamically created rating star plugin in jquerymobile在 jquerymobile 中动态创建的评级星插件中未正确应用样式
【发布时间】:2012-05-18 13:43:20
【问题描述】:

我正在使用 jquery rating star 插件,静态使用时一切正常,但是当我动态创建列表视图并将“选项”输入控件放入其中时,它从不应用样式。

在我已经加载了样式表:

<head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
   <meta name="viewport" id="viewport" content="width=device-width,height=device-height,initial-scale=1.0,user-scalable=no"/> 
   <link rel="stylesheet" href="js/rating/jquery.rating.css" />
   <link rel="stylesheet" href="css/themes/etensr.theme.css" />
   <script src="jquery.1.7.1.min.js" type="text/javascript"></script>       
   <script type="text/javascript" src="js/rating/jquery.rating.js"></script> 
   <script type="text/javascript" src="jquery.mobile.1.0.min.js"></script>       
</head>

和页面:

<div data-role="page" id="subcategories" data-theme="a">
    <div class="header" data-role="header" style="height: 42px;" >  
        <a data-rel="back" data-role="button" data-theme="c">Back</a>
        <a href="order.html" data-role="button" data-theme="c" data-icon="gear" data-iconpos="right" class="ui-btn-right">0.00 SRD - </a>                                 
    </div>        
    <div data-role="content" id="subcategoryCnt">
      <ul id="subcategoryList" data-role="listview" data-theme="a" data-dividertheme="c" >
        <li data-icon="arrow-r" > 
           <img src="images/thumb80x80.jpg" />
           <div>
              <div style="float:left;"><p>Product</p></div>
              <div style="float:right;font-size: 12px;">Price</div>    
              <div style="clear:both;"></div>
              <div style="float:left;">
                 <input name="star1" type="radio" data-role="none" class="star" disabled="disabled" />
                 <input name="star1" type="radio" data-role="none" class="star" disabled="disabled" />
                 <input name="star1" type="radio" data-role="none" class="star" disabled="disabled" checked="checked"/>
              </div>
           </div>           
        </li>    
      </ul>                    
    </div>
</div>

所有这些都正确显示,但是当我动态加载列表视图项目时,输入单选不会像星星一样呈现,而是普通单选按钮:

 <div data-role="page" id="subcategories" data-theme="a">
    <div class="header" data-role="header" style="height: 42px;" >  
        <a data-rel="back" data-role="button" data-theme="c">Back</a>
        <a href="order.html" data-role="button" data-theme="c" data-icon="gear" data-iconpos="right" class="ui-btn-right">0.00 SRD - </a>                                 
    </div>        
    <div data-role="content" id="subcategoryCnt">
        <script type="text/javascript">
           GetSubcategories(); 
        </script>                                    
    </div>
 </div>

JS 是:

function GetSubcategories() {
   subcategories = result.GetSubcategoriesResult;
   if (subcategories.length > 0) {
      var html = '<ul id="subcategoryList" data-role="listview" data-theme="a" data-dividertheme="c" >';
      for (i = 0; i < subcategories.length; i++) {
          html = html + '<li data-role="list-divider">' + subcategories[i].Name + '</li>';
          prods = subcategories[i].Products;
          if (prods.length > 0) {
              for (j = 0; j < prods.length; j++) {
                  html = html +
                      '<li data-icon="arrow-r" >' +
                        '<a href="products.html"  rel="external">' +
                            '<img src="images/thumb80x80.jpg" />' +
                            '<div>' +
                               '<div style="float:left;"><p>' + prods[j].Name + '</p></div>' +
                               '<div style="float:right;font-size: 12px;">' + prods[j].Price + ' SRD</div>' +
                               '<div style="clear:both;"></div>' +
                               '<div style="float:left;">' +
                                    '<input name="star' + prods[j].Id + '" type="radio" data-role="none" class="star" disabled="disabled" />' +
                                    '<input name="star' + prods[j].Id + '" type="radio" data-role="none" class="star" disabled="disabled" />' +
                                    '<input name="star' + prods[j].Id + '" type="radio" data-role="none" class="star" disabled="disabled" checked="checked"/>' +
                               '</div>' +
                            '</div>' +
                        '</a>' +
                      '</li>';
              }
          }
      }
          html += '</ul>';
   }
   $('#subcategoryCnt').html(html);
   $('#subcategoryList').listview();    
}

当我做同样的事情但动态显示时,除了输入收音机没有像星星一样显示之外,所有东西都会正确显示。

我做错了什么? 谢谢

【问题讨论】:

    标签: jquery css jquery-mobile


    【解决方案1】:

    data-icon="star"

    另外我觉得你还是需要刷新jQM

    JS

    $('#mylist').listview('refresh');
    

    【讨论】:

    • 感谢 Phill,但这并不能解决我的问题。我仍然不知道为什么当我动态创建控件时,除了 jquerymobile 样式之外的样式没有被应用。
    【解决方案2】:

    尝试使用实时查询,因为当您执行 $(selector).rating(); , 该插件应用于 DOM 中存在的选择器定义的元素。当您动态添加它们时,您也需要动态地将插件应用到它们。这就是 livequery 可以为您提供帮助的地方。做类似的事情

    $(selector).livequery(function(){
    $(this).rating(); // 或者添加你想要的选项
    });

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多