好的,没有问题,但我很好奇如何缩短这个功能。
$('input#sum').blur(function() {
var fieldVal = $(this).val();
$(this).val(formatNumber(fieldVal));
});
我得到模糊的字段值,用formatNumber自定义函数修改它并返回。但是看到我有3个选择器,有没有办法缩短它?
格式编号功能是:
function formatNumber(input) {
// modify and return input
}
答案 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
});