更短版本的jquery函数

时间:2014-08-14 08:41:26

标签: javascript jquery

好的,没有问题,但我很好奇如何缩短这个功能。

$('input#sum').blur(function() {
        var fieldVal = $(this).val();
        $(this).val(formatNumber(fieldVal));
});

我得到模糊的字段值,用formatNumber自定义函数修改它并返回。但是看到我有3个选择器,有没有办法缩短它?

格式编号功能是:

function formatNumber(input) {
 // modify and return input
}

5 个答案:

答案 0 :(得分:3)

您确定可以通过将函数传递给val()

$('input#sum').blur(function() {
    $(this).val(function(_,v){ return formatNumber(v); });
});

<强>文档

答案 1 :(得分:1)

$('input#sum').blur(function() {
        $(this).val(formatNumber($(this).val()));
});

无法解决您的选择器问题,但它更短......

答案 2 :(得分:1)

$('input#sum').blur(function() {
    this.value = formatNumber(this.value);
});
//1 selector!

我甚至不知道为什么你需要jQuery。 {strong> Don't abuse jQuery don't actually need it

在第7294行查看jQuery's source code

val: function( value ) {
    var hooks, ret, isFunction,
        elem = this[0];

    if ( !arguments.length ) {
        if ( elem ) {
            hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];

            if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
                return ret;
            }

            ret = elem.value;

            return typeof ret === "string" ?
                // handle most common string cases
                ret.replace(rreturn, "") :
                // handle cases where value is null/undef or number
                ret == null ? "" : ret;
        }
        return;
    }
    //...
}

如果你摆脱了简单地将换行符替换为\r\n并忽略底部特殊null情况的钩子部分,那么唯一剩下的就是ret = elem.value。现在您知道可以安全地使用this.value代替$(this).val()

答案 3 :(得分:0)

您可以直接将格式化的值放在.val()中。并直接使用ID选择器$('#sum')代替$('input#sum'),但请确保您在html页面中拥有唯一ID。

$('#sum').blur(function() {
        $(this).val(formatNumber($(this).val()));
});

答案 4 :(得分:0)

您可以使用普通的Javascript并创建一个formatNumber函数extends String(或其他类型)。

// Your function
String.prototype.formatNumber = function () {
 // return the modified value of this
 return this;
};

$('selector').blur(function() {
    this.value = this.value.formatNumber();
});

<强>更新: 最好你可以扩展HTMLInputElement并将功能添加到它。

// Extends the HTMLInputElement
HTMLInputElement.prototype.formatNumber = function(){
 // Your function here
 this.value = this.value.toFixed(0); // An example
};

$('input').blur(function() {
   this.formatNumber(); // 1 line
});