【问题标题】:change jquery mobile color swatch dynamically动态更改jquery mobile颜色样本
【发布时间】:2011-11-12 22:38:14
【问题描述】:

我想使用 javascript 动态更改 jquery-mobile 按钮颜色样本,但我找不到方法(除了删除和添加所有类和事件处理程序,但这很麻烦)。
最好的方法是什么?

【问题讨论】:

  • 我找到了另一种更新主题的方法并写了一篇关于它的博客文章,因为我在 stackoverflow 上找不到我想要的东西。万一有人需要它:vshivam.wordpress.com/2015/06/07/…

标签: jquery-mobile themes


【解决方案1】:

至少在 1.2.0 (1.2.0-rc1) 中它很简单(可能在次要版本中有效):

$( "#myButton" ).buttonMarkup({theme: 'd'});

不需要.button('refresh')

【讨论】:

【解决方案2】:

嗯,我确实做了这样的事情:

JS(可能需要稍作调整才能得到你想要的)

$('input[name=theme-options]').change(function() {
    var currentTheme = $('#home').attr('data-theme');
    var selectedTheme = $(this).val();

    alert('CT '+currentTheme+' ST '+selectedTheme);

    $('.ui-body-' + currentTheme).each(function(){
        $(this).removeClass('ui-body-' + currentTheme).addClass('ui-body-' + selectedTheme);    
    });

    $('.ui-btn-up-' + currentTheme).each(function(){
        $(this).removeClass('ui-btn-up-' + currentTheme).addClass('ui-btn-up-' + selectedTheme);    
    });

    $('.ui-btn-down-' + currentTheme).each(function(){
        $(this).removeClass('ui-btn-down-' + currentTheme).addClass('ui-btn-down-' + selectedTheme);    
    });

    $('#home').find('*[data-theme]').each(function(index){
        $(this).attr('data-theme',selectedTheme);
    });

    $('#home').attr('data-theme', selectedTheme).removeClass('ui-body-' + currentTheme).addClass('ui-body-' + selectedTheme).trigger('create');
});

HTML(可能需要稍作调整才能得到你想要的)

<div data-role="page" id="home" data-theme="a"> 
    <div data-role="content">
        <div class="content-primary">             
            <p>
                <div data-role="fieldcontain">
                    <fieldset data-role="controlgroup">
                        <legend>Choose a Theme:</legend>
                        <input type="radio" name="theme-options" id="theme-option-a" value="a" checked="checked" data-theme="a" />
                        <label for="theme-option-a" data-theme="a">Theme A</label>

                        <input type="radio" name="theme-options" id="theme-option-b" value="b" data-theme="b" />
                        <label for="theme-option-b" data-theme="b">Theme B</label>

                        <input type="radio" name="theme-options" id="theme-option-c" value="c" data-theme="c" />
                        <label for="theme-option-c" data-theme="c">Theme C</label>

                        <input type="radio" name="theme-options" id="theme-option-d" value="d" data-theme="d" />
                        <label for="theme-option-d" data-theme="d">Theme D</label>

                        <input type="radio" name="theme-options" id="theme-option-e" value="e" data-theme="e" />
                        <label for="theme-option-e" data-theme="e">Theme E</label>
                    </fieldset>
                </div>
            </p>

            <form action="#" method="get"> 

                <h2>Form elements</h2> 

                <div data-role="fieldcontain"> 
                    <label for="name">Text Input:</label> 
                    <input type="text" name="name" id="name" value=""  /> 
                </div> 

                <div data-role="fieldcontain"> 
                    <label for="textarea">Textarea:</label> 
                    <textarea cols="40" rows="8" name="textarea" id="textarea"></textarea> 
                </div> 

                <div data-role="fieldcontain"> 
                    <label for="search">Search Input:</label> 
                    <input type="search" name="password" id="search" value=""  /> 
                </div> 

                <div data-role="fieldcontain"> 
                    <label for="slider2">Flip switch:</label> 
                    <select name="slider2" id="slider2" data-role="slider"> 
                        <option value="off">Off</option> 
                        <option value="on">On</option> 
                    </select> 
                </div> 

                <div data-role="fieldcontain"> 
                    <label for="slider">Slider:</label> 
                    <input type="range" name="slider" id="slider" value="0" min="0" max="100"  /> 
                </div> 

                <div data-role="fieldcontain"> 
                    <fieldset data-role="controlgroup"> 
                        <legend>Choose as many snacks as you'd like:</legend> 
                        <input type="checkbox" name="checkbox-1a" id="checkbox-1a" class="custom" /> 
                        <label for="checkbox-1a">Cheetos</label> 

                        <input type="checkbox" name="checkbox-2a" id="checkbox-2a" class="custom" /> 
                        <label for="checkbox-2a">Doritos</label> 

                        <input type="checkbox" name="checkbox-3a" id="checkbox-3a" class="custom" /> 
                        <label for="checkbox-3a">Fritos</label> 

                        <input type="checkbox" name="checkbox-4a" id="checkbox-4a" class="custom" /> 
                        <label for="checkbox-4a">Sun Chips</label> 
                    </fieldset> 
                </div> 

                <div data-role="fieldcontain"> 
                    <fieldset data-role="controlgroup" data-type="horizontal"> 
                        <legend>Font styling:</legend> 
                        <input type="checkbox" name="checkbox-6" id="checkbox-6" class="custom" /> 
                        <label for="checkbox-6">b</label> 

                        <input type="checkbox" name="checkbox-7" id="checkbox-7" class="custom" /> 
                        <label for="checkbox-7"><em>i</em></label> 

                        <input type="checkbox" name="checkbox-8" id="checkbox-8" class="custom" /> 
                        <label for="checkbox-8">u</label> 
                    </fieldset> 
                </div> 

                <div data-role="fieldcontain"> 
                    <fieldset data-role="controlgroup"> 
                        <legend>Choose a pet:</legend> 
                        <input type="radio" name="radio-choice-1" id="radio-choice-1" value="choice-1" checked="checked" /> 
                        <label for="radio-choice-1">Cat</label> 

                        <input type="radio" name="radio-choice-1" id="radio-choice-2" value="choice-2"  /> 
                        <label for="radio-choice-2">Dog</label> 

                        <input type="radio" name="radio-choice-1" id="radio-choice-3" value="choice-3"  /> 
                        <label for="radio-choice-3">Hamster</label> 

                        <input type="radio" name="radio-choice-1" id="radio-choice-4" value="choice-4"  /> 
                        <label for="radio-choice-4">Lizard</label> 
                    </fieldset> 
                </div> 

                <div data-role="fieldcontain"> 
                    <fieldset data-role="controlgroup" data-type="horizontal"> 
                        <legend>Layout view:</legend> 
                        <input type="radio" name="radio-choice-b" id="radio-choice-c" value="on" checked="checked" /> 
                        <label for="radio-choice-c">List</label> 
                        <input type="radio" name="radio-choice-b" id="radio-choice-d" value="off" /> 
                        <label for="radio-choice-d">Grid</label> 
                        <input type="radio" name="radio-choice-b" id="radio-choice-e" value="other" /> 
                        <label for="radio-choice-e">Gallery</label> 
                    </fieldset> 
                </div> 

                <div data-role="fieldcontain"> 
                    <label for="select-choice-1" class="select">Choose shipping method:</label> 
                    <select name="select-choice-1" id="select-choice-1"> 
                        <option value="standard">Standard: 7 day</option> 
                        <option value="rush">Rush: 3 days</option> 
                        <option value="express">Express: next day</option> 
                        <option value="overnight">Overnight</option> 
                    </select> 
                </div> 

                <div data-role="fieldcontain"> 
                    <label for="select-choice-3" class="select">Your state:</label> 
                    <select name="select-choice-3" id="select-choice-3"> 
                        <option value="AL">Alabama</option> 
                        <option value="AK">Alaska</option> 
                        <option value="AZ">Arizona</option> 
                        <option value="AR">Arkansas</option> 
                        <option value="CA">California</option> 
                        <option value="CO">Colorado</option> 
                        <option value="CT">Connecticut</option> 
                        <option value="DE">Delaware</option> 
                        <option value="FL">Florida</option> 
                        <option value="GA">Georgia</option> 
                        <option value="HI">Hawaii</option> 
                        <option value="ID">Idaho</option> 
                        <option value="IL">Illinois</option> 
                        <option value="IN">Indiana</option> 
                        <option value="IA">Iowa</option> 
                        <option value="KS">Kansas</option> 
                        <option value="KY">Kentucky</option> 
                        <option value="LA">Louisiana</option> 
                        <option value="ME">Maine</option> 
                        <option value="MD">Maryland</option> 
                        <option value="MA">Massachusetts</option> 
                        <option value="MI">Michigan</option> 
                        <option value="MN">Minnesota</option> 
                        <option value="MS">Mississippi</option> 
                        <option value="MO">Missouri</option> 
                        <option value="MT">Montana</option> 
                        <option value="NE">Nebraska</option> 
                        <option value="NV">Nevada</option> 
                        <option value="NH">New Hampshire</option> 
                        <option value="NJ">New Jersey</option> 
                        <option value="NM">New Mexico</option> 
                        <option value="NY">New York</option> 
                        <option value="NC">North Carolina</option> 
                        <option value="ND">North Dakota</option> 
                        <option value="OH">Ohio</option> 
                        <option value="OK">Oklahoma</option> 
                        <option value="OR">Oregon</option> 
                        <option value="PA">Pennsylvania</option> 
                        <option value="RI">Rhode Island</option> 
                        <option value="SC">South Carolina</option> 
                        <option value="SD">South Dakota</option> 
                        <option value="TN">Tennessee</option> 
                        <option value="TX">Texas</option> 
                        <option value="UT">Utah</option> 
                        <option value="VT">Vermont</option> 
                        <option value="VA">Virginia</option> 
                        <option value="WA">Washington</option> 
                        <option value="WV">West Virginia</option> 
                        <option value="WI">Wisconsin</option> 
                        <option value="WY">Wyoming</option> 
                    </select> 
                </div> 

                <div data-role="fieldcontain"> 
                    <label for="select-choice-a" class="select">Choose shipping method:</label> 
                    <select name="select-choice-a" id="select-choice-a" data-native-menu="false"> 
                        <option>Custom menu example</option> 
                        <option value="standard">Standard: 7 day</option> 
                        <option value="rush">Rush: 3 days</option> 
                        <option value="express">Express: next day</option> 
                        <option value="overnight">Overnight</option> 
                    </select> 
                </div> 

                <div class="ui-body ui-body-b"> 
                    <fieldset class="ui-grid-a"> 
                        <div class="ui-block-a"><button type="submit" data-theme="d">Cancel</button></div> 
                        <div class="ui-block-b"><button type="submit" data-theme="a">Submit</button></div> 
                    </fieldset> 
                </div> 
            </form> 
        </div><!--/content-primary -->        

        <div class="content-secondary"> 

            <div data-role="collapsible" data-collapsed="true" data-theme="b"> 

                <h3>More in this section</h3> 

                <ul data-role="listview" data-theme="c" data-dividertheme="d"> 

                    <li data-role="list-divider">Form elements</li> 
                    <li><a href="docs-forms.html">Form basics</a></li> 
                    <li data-theme="a"><a href="forms-all.html">Form element gallery</a></li> 
                    <li><a href="texts/index.html">Text inputs</a></li> 
                    <li><a href="forms-search.html">Search inputs</a></li> 
                    <li><a href="forms-slider.html">Slider</a></li> 
                    <li><a href="forms-switch.html">Flip toggle switch</a></li> 
                    <li><a href="radiobuttons/index.html">Radio buttons</a></li> 
                    <li><a href="checkboxes/index.html">Checkboxes</a></li> 
                    <li><a href="selects/index.html">Select menus</a></li> 
                    <li><a href="forms-themes.html">Theming forms</a></li> 
                    <li><a href="forms-all-native.html">Native form elements</a></li> 
                    <li><a href="forms-sample.html">Submitting forms</a></li> 
                    <li><a href="plugin-eventsmethods.html">Plugin methods</a></li> 

                </ul> 
            </div> 
        </div>        
    </div>
</div>

【讨论】:

  • $('#showHideButton').click(function(){ var j=0; if(i%2 !=0){ $('#passenger').find('tr.content').hide(); $(this).removeClass('ui-icon-d').addClass('ui-icon-u').trigger('create');; j=1; } else { $('#passenger').find('tr.content').show(); $(this).removeClass('ui-icon-u').addClass('ui-icon-d').trigger('create');; j=1 } i = i+j; }); 一切正常,但图标没有改变。
【解决方案3】:

对我有用的是:

//set button active
$(this).parent().addClass('ui-btn-active');
//set button inactive
$(this).parent().removeClass('ui-btn-active');

将“ui-btn-active”类添加到父级会将当前按钮设置为活动并将数据主题更改为“b”。但是,这不适用于任何任意样本。因此,您可能仍需要前面提到的较长解决方案之一。

【讨论】:

    【解决方案4】:

    是的,看来没有办法简单地更改主题色板。

    我破解了一个通过正则表达式交换颜色的简单函数:

    $.fn.changeColorSwatch = function(theme, type) {
      if (!type) {
        type = 'theme';
      }
      var currentTheme = this.attr('data-' + type);
      if (!currentTheme) {
        currentTheme = 'c';
      }
      this.attr('data-' + type, theme);
      var regex = new RegExp('^ui-(.*)-' + currentTheme + '$');
      var classes = $.extend({}, this[0].classList);
      var i = classes.length;
      while (i--) {
        var match = classes[i].match(regex);
        if (match) {
          this.removeClass(match[0]);
          this.addClass('ui-' + match[1] + '-' + theme);
        }
      }
    };
    

    我知道,它应该使用jqmData 而不是attr,但是 data-theme 属性没有正确更改。

    【讨论】:

      【解决方案5】:

      按钮也需要更改父元素主题。

      将以下代码添加到 $.fn.changeColorSwatch 函数的末尾

            if(this.attr('type') == 'button'){
            this.parent().changeColorSwatch(theme, type);
        }
      

      【讨论】:

        【解决方案6】:

        如果按钮定义为:

        <button type="button" id="yourbutton">Hello</button>
        

        那么这个效果最快:

        $('#yourbutton').parent().find('.ui-btn-inner').css("background-color",yournewcolor);
        

        【讨论】:

          【解决方案7】:

          我用这个,效果很好!! :D

          Mikael Kindborg answer from Change data-theme in jQuery mobile

          $.mobile.changeGlobalTheme = function(theme)
              {
                  // These themes will be cleared, add more
                  // swatch letters as needed.
                  var themes = " a b c d e";
          
                  // Updates the theme for all elements that match the
                  // CSS selector with the specified theme class.
                  function setTheme(cssSelector, themeClass, theme)
                  {
                      $(cssSelector)
                              .removeClass(themes.split(" ").join(" " + themeClass + "-"))
                              .addClass(themeClass + "-" + theme)
                              .attr("data-theme", theme);
                  }
          
                  // Add more selectors/theme classes as needed.
                  setTheme(".ui-mobile-viewport", "ui-overlay", theme);
                  setTheme("[data-role='page']", "ui-page-theme", theme);
                  setTheme("[data-role='header']", "ui-bar", theme);
                  setTheme("[data-role='listview'] > li", "ui-bar", theme);
                  setTheme(".ui-btn", "ui-btn-up", theme);
                  setTheme(".ui-btn", "ui-btn-hover", theme);
              };
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-01-11
            • 2018-04-24
            • 2023-03-25
            • 1970-01-01
            相关资源
            最近更新 更多