2016-08-16 2 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 

Это тривиально, без проблем. Мой вопрос о наиболее эффективном способе получения значения «десятичных знаков». Обычно, я бы написал (JQuery):

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

... но мне кажется, там должно быть более эффективным способом, чтобы получить значение «десятичных знаков», так как мы уже выбрали вход на основе по этому атрибуту. Есть ли мой код, как написано, единственным способом?

+0

СЭРМ штраф мне – Noppey

+2

Если вы используете пользовательские атрибуты, по крайней мере использовать * действительный * пользовательские атрибуты, используя префикс 'data- *', такой как 'data-decimals', который можно получить в обычном JavaScript с помощью' elementReference.dataset.decimals' или в jQuery с: '$ (ele mentReference) .data ('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

Итак, чтобы подвести итог, нет способа чтобы получить значение атрибута, не запрашивая его каким-либо образом внутри функции, никаких ярлыков. Мой вопрос был в значительной степени информативным, надеясь узнать что-то новое. Спасибо. –