我需要您在AutoNumeric js方面的帮助。
我使用输入并以这种方式扩展:
<input type="text" name="currency" id="currency">
<span class="value_currency"></span>
我正在像这样在javascript中使用AutoNumeric:
new AutoNumeric('#currency', 'Turkish');
并输出如下:
1.750,15
我需要这个:
1750.15
我的问题是,当货币中的数据更改时,如何动态地在value_curreny中打印。但是我需要原始值而不是格式化值。谢谢。
答案 0 :(得分:1)
https://github.com/Microsoft/TypeScript/issues/16475
您需要编写以下代码。
HTML:
<script type="text/x-template" id="index-template">
<div>
<autonumeric
v-model="value"
placeholder="number"
:options="{mDec: 3}"/>
<p>{{ value }}</p>
<button type="button" @click="random">Random</button>
</div>
</script>
<div id="app">
<index/>
</div>
Javascript:
Vue.component('autonumeric', {
props: {
value: Number,
options: {
type: Object,
default: {}
},
tagName: {
type: String,
default: 'input'
}
},
created() {
this.onInput = false;
this.onPaste = false;
},
mounted() {
const defaultOptions = {aSep: ','},
options = Object.assign(defaultOptions, this.options),
input = this.$refs.input,
$input = jQuery(input);
$input.autoNumeric('init', options);
$input.autoNumeric('set', this.value);
$input.on('focus', () => {
$input.select();
});
// hack pending issue https://github.com/BobKnothe/autoNumeric/issues/251
$input.on('paste', e => {
this.onPaste = true;
const text = new Number(e.originalEvent.clipboardData.getData('Text')).valueOf();
this.$emit('input', text);
});
// end hack
$input.on('input', e => {
if (!this.onPaste) {
this.onInput = true;
const value = new Number($input.autoNumeric('get')).valueOf();
this.$emit('input', value);
}
this.onPaste = false;
});
},
watch: {
value(value, oldValue) {
if (!this.onInput && !this.onPaste) {
jQuery(this.$refs.input).autoNumeric('set', value);
}
this.onInput = false;
}
},
render(createElement) {
const attrs = this.tagName === 'input' ?
{ type: 'text', style: 'text-align: right;' } :
{};
return createElement(this.tagName, {
attrs,
ref: 'input'
});
}
});
Vue.component('index', {
template: '#index-template',
data() {
return {
value: 666
};
},
methods: {
random() {
this.value = Math.random() * 10000;
},
print() {
console.log('print', this.value);
}
}
});
new Vue({
el: '#app'
});
答案 1 :(得分:1)
如果对任何人有帮助,我最终会使用AutoNumeric静态方法“ getNumber”
https://github.com/autoNumeric/autoNumeric/blob/master/README.md#static-methods
在这种情况下:
AutoNumeric.getNumber('#currency');
答案 2 :(得分:0)
下面的代码使用jquery跟踪对#currency
输入进行更改的时间,我使用了广泛的事件触发器,以便代码可以在任何keydown
,paste
等上运行更改。您可能需要根据自己的需要进行调整(即减少触发器的数量)。注册触发事件后,代码将执行以下操作:
.val()
收集为.replace(/[^\d.-]/g, '')
.html()
的{{1}}。如果您希望逗号保留在字符串中(即将1,234.56英镑简化为1,234.56,则将
.currency-value
函数从regex
更改为.replace(/[^\d.-]/g, '')
(即在其中添加逗号) 。下面的代码目前删除逗号。
让我知道这是否不是您想要的。
土耳其里拉已添加到v4.2.8。这是一个基本设置,演示了如何获取仅基于逗号的货币的原始价值。
.replace(/[^\d.,-]/g, '')
// Apply Autonumeric to #currency input
new AutoNumeric('#currency', 'Turkish');
// Trigger function of any change to #currency input
$("#currency").on("propertychange change keyup paste input", function(){
// Get value from input, replace all non-numeric or '.' values
rawValue = $(this).val().replace(/[^\d,-]/g, '');
// Replace comma with decimal point
rawValue = rawValue.replace(",", '.');
// Print value
$(".value_currency").html( rawValue );
});
此扩展演示允许您使用<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://unpkg.com/autonumeric@4.5.1/dist/autoNumeric.min.js"></script>
<input type="text" name="currency" id="currency">
<span class="value_currency"></span>
来存储货币类型,以及基于逗号还是小数点的货币。
attr
// Apply Autonumeric to #currency input
$("input[currency]").each(function() {
// Get id of this element
currencyID = $(this).attr("id");
// Apply AutoNumeric to given input
new AutoNumeric('#' + currencyID, $(this).attr("currency"));
});
// Trigger function of any change to #currency input
$("input[currency]").on("propertychange change keyup paste input lostfocus", function() {
// Get divider from the element's attribute
divider = $(this).attr("currency-divider");
// Create regex expression and apply
var regex2 = new RegExp('[^0-9' + divider + ']', 'g');
rawValue = $(this).val().replace(regex2, '');
// Decimalisation of non-decimal based currencies by default if only a single divider is specified
// Automatically applied to comma based currencies only
if (divider.length == 1 && divider != ".") {
rawValue = rawValue.replace(divider, '.');
}
// Print raw value
$(this).parent().children(".value_currency").html(rawValue);
});