2016-08-16 65 views
1

我有一个输入:jquery的,属性选择器,获得当前属性值

<input type="text" size="5" maxlength="5" decimals="2"> 

其中“小数”可以是从0到4

的值。在onblur事件,任何数字用户类型将改为符合,因此:

decimals="2" 
User enters: 123.456 
Input is changed to: 123.46 

这很平凡,没问题。我的问题是关于获得“小数”值的最有效方法。既然我们已经选择了基于输入

$('[decimals]').blur(function(){ 
    val = $(this).attr('decimals'); 
    // *** do stuff with val *** 
}); 

...但在我看来,就必须有一种更有效的方式来获得“小数”的价值:通常情况下,我会写(jQuery的)在那个属性上。有没有,或者我的代码是唯一的写法?

+0

的SERMs没什么问题 – Noppey

+2

如果您使用自定义属性至少使用*有效*自定义属性,使用'data-*'前缀,比如'data-decimals',可以用'elementReference.dataset.decimals'在普通的JavaScript中检索,或者在jQuery中用'$(ele ('decimals');' –

+0

你在说'$(this)'吗?如果你想调用'$ .attr',你不能避免它,但这几乎是免费的(jQuery缓存),但你可以用'this.getAttribute('decimals')'读取值也 – cske

回答

0

您可以看看attributes。这是一个NamedNodeMap有一些功能。

如果你指的是属性而不是custom data attributes你可以这样做:

$(function() { 
 
    $('[decimals]').blur(function(){ 
 
    var val = this.attributes.decimals.value; 
 
    var val1 = this.attributes.getNamedItem('decimals').value; 
 
    var val2 = this.getAttribute('decimals'); 
 
    
 
    console.log('this.attributes.decimals.value = ' + val); 
 
    console.log('this.attributes.getNamedItem("decimals").value = ' + val1); 
 
    console.log('this.getAttribute("decimals") = ' + val); 
 
    // *** do stuff with val *** 
 
    }).trigger('blur'); 
 
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 

 
<form> 
 
    <input type="text" size="5" maxlength="5" decimals="2"> 
 
</form>

相反,如果你指的是自定义的数据属性:

小数=” 2“

用户输入:123.456

输入更改为:123.46

你可以这样做:

$(function() { 
 
    $('[data-decimals]').on('blur', function(e){ 
 
    var val = +$(this).data('decimals'); 
 

 
    var txtNumber = +this.value; 
 

 
    this.value = txtNumber.toFixed(2); 
 
    }); 
 
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 

 
<form> 
 
    <input type="number" size="5" maxlength="5" data-decimals="2"> 
 
</form>

+0

因此,总而言之,没有办法无需在函数内部以某种方式询问属性值,也不需要快捷方式。我的问题主要是信息性的,希望能够学习新的东西。谢谢。 –