JQM调整标签宽度

Posted

技术标签:

【中文标题】JQM调整标签宽度【英文标题】:JQM adjust label width 【发布时间】:2013-04-30 08:35:31 【问题描述】:

我们想调整 jquery 移动表单中的所有标签标签,其中带有最大标签。这里是一个字段的代码示例:

... <fieldset data-role="fieldcontain">
    <label for="fusrName">Benutzername/E-Mail<b class="kontoman-mandatory">*</b></label>
    <input id="fusrName" name="fusrName" type="text" placeholder="Benutzername/E-Mail" value="">
</fieldset>...

这是jquery函数:

$.fn.labelWidth = function () 
    var maxWidth = 0;
    $('fieldset').each(function() 
        $(this).find('label').each(function() 
            var width = $(this).width();
            if (width > maxWidth) 
                maxWidth = width;
            
        );
    );
    $('fieldset').each(function() 
        $(this).find('label').each(function() 
            $(this).css(width:maxWidth);
        );
    );

...这是函数调用:

$(document).on('pageshow',function(event,ui) 
$('#kontoman-form').labelWidth();

如果我们调试: 在变量 maxWith 中,我们有正确的宽度......但形式不会改变? 我们的错误是什么?

【问题讨论】:

jsfiddle.net/Palestinian/zL6da 它的工作..但是你仍然需要检查标签和输入宽度并调整两者。 【参考方案1】:

你离得很近,但还不够近。你的插件是假设每个标签都有一个单独的宽度,这是不正确的。标签总是有 20% 的宽度,输入有 78% 的宽度,它们之间有 2% 的边距。

工作示例:http://jsfiddle.net/Gajotres/mMmcP/

您更改了插件代码:

$.fn.labelWidth = function () 
    // This will override preset 20% width
    $('.ui-input-text').style('width', 'auto', 'important');

    var maxWidth = 0;
    var contentWidth = $('.ui-content').width();
    $('fieldset').each(function() 
        $(this).find('label').each(function() 
            var width = $(this).width();
            if (width > maxWidth) 
                maxWidth = width;
            
        );
    );

    var finalLabelWidth = Math.ceil((maxWidth/contentWidth)*100);
    var finalInputWidth = 100 - finalLabelWidth - 2;

    $('fieldset').each(function() 
        $(this).find('label').each(function() 
            $(this).style('width', finalLabelWidth+'%', 'important');
            $(this).next().style('width', finalInputWidth+'%', 'important');
        );      
    );

另一个插件对于这个插件的工作很重要,可以找到 here。我不是第二个插件开发者。

这是第二个插件:

// For those who need them (< IE 9), add support for CSS functions
var isStyleFuncSupported = CSSStyleDeclaration.prototype.getPropertyValue != null;
if (!isStyleFuncSupported) 
    CSSStyleDeclaration.prototype.getPropertyValue = function(a) 
        return this.getAttribute(a);
    ;
    CSSStyleDeclaration.prototype.setProperty = function(styleName, value, priority) 
        this.setAttribute(styleName,value);
        var priority = typeof priority != 'undefined' ? priority : '';
        if (priority != '') 
            // Add priority manually
            var rule = new RegExp(RegExp.escape(styleName) + '\\s*:\\s*' + RegExp.escape(value) + '(\\s*;)?', 'gmi');
            this.cssText = this.cssText.replace(rule, styleName + ': ' + value + ' !' + priority + ';');
         
    
    CSSStyleDeclaration.prototype.removeProperty = function(a) 
        return this.removeAttribute(a);
    
    CSSStyleDeclaration.prototype.getPropertyPriority = function(styleName) 
        var rule = new RegExp(RegExp.escape(styleName) + '\\s*:\\s*[^\\s]*\\s*!important(\\s*;)?', 'gmi');
        return rule.test(this.cssText) ? 'important' : '';
    


// Escape regex chars with \
RegExp.escape = function(text) 
    return text.replace(/[-[\]()*+?.,\\^$|#\s]/g, "\\$&");


// The style function
jQuery.fn.style = function(styleName, value, priority) 
    // DOM node
    var node = this.get(0);
    // Ensure we have a DOM node 
    if (typeof node == 'undefined') 
        return;
    
    // CSSStyleDeclaration
    var style = this.get(0).style;
    // Getter/Setter
    if (typeof styleName != 'undefined') 
        if (typeof value != 'undefined') 
            // Set style property
            var priority = typeof priority != 'undefined' ? priority : '';
            style.setProperty(styleName, value, priority);
         else 
            // Get style property
            return style.getPropertyValue(styleName);
        
     else 
        // Get CSSStyleDeclaration
        return style;
    

【讨论】:

以上是关于JQM调整标签宽度的主要内容,如果未能解决你的问题,请参考以下文章

根据 UITableViewCell 标签高度和宽度调整背景图片大小

以编程方式动态调整 uilabel 宽度的约束

Swift 3 - 调整字体大小以适应宽度,多行

如何动态调整 UITableViewCell 内的两个文本标签宽度?

如何自动调整标签大小以适应固定宽度的容器?

使用自动布局以编程方式调整标签宽度