全部好,
我有一段javaScript从提供的字符串中删除逗号(在我的情况下是货币值)
是:
function replaceCommaInCurrency(myField, val)
{
var re = /,/g;
document.net1003Form.myField.value=val.replace(re, '');
}
'MyField'是我尝试在我传入的任何字段上动态完成此工作,但它不起作用,我收到错误,说'MyField'无效。我得到了我的,但我认为这是有效的。
我通过使用:onBlur =“replaceCommaInCurrency(this.name,this.value);返回false;”
this.name和this.value正在传递正确的值...字段名称及其值。
如何动态执行此操作?
-Jason
答案 0 :(得分:4)
您可以使用eval使代码段正常工作:
eval("document.net1003Form." + myField + ".value=val.replace(re, '');");
如下所述,方括号起作用(并且不像eval那样糟糕),愚蠢我忘记了这些:
document.net1003Form[myField].value=val.replace(re, '');
或者,尝试这样的事情:
function replaceCommaInCurrency(field){
var re = /,/g;
field.value = field.value.replace(re, '');
}
这样被调用:
onBlur="replaceCommaInCurrency(this); return false";
你应该考虑使用javascript工具包来做这样的事情。你可以在每个输入上设置一个类似“货币”的类,然后使用这个基于jQuery的Javascript片段来处理所有事情:
$(function(){
$("input.currency").bind('blur', function(){
this.value = $(this).val().replace(',', '');
})
});
此代码将触发文档就绪,将事件处理程序附加到以货币作为其类的每个输入,然后执行替换。请注意,您也不需要正则表达式进行替换。
答案 1 :(得分:3)
如果您将其编码到标记中,例如, onblur =“replaceCommaInCurrency(this)”,发起事件的控件作为参数传递。然后你应该能够做类似的事情:
myField.value = myField.value.replace(re, '');
使用jQuery:
var jqField = $(myField);
jqField.val(jqField.val().replace(re, ''));
答案 2 :(得分:1)
通常,您应该使用一个能够处理此类低级功能的框架,但您问题的具体答案是对字段名称使用括号表示法:
function replaceCommaInCurrency( myField, val)
{
var re = /,/g;
document.net1003Form[myField].value=val.replace(re, '');
}
答案 3 :(得分:0)
function removeCommaInCurrency(myField)
{
var re = /,/g;
myField.value=myField.value.replace(re, '');
}
- 然后像这样调用它:
<input type="text" name="..." onchange="removeCommaInCurrency(this);">
答案 4 :(得分:0)
(使用'document.forms.formname'访问表单,不会在与文档对象成员同名的表单上发生冲突,并使用'forms.elements.fieldname'对字段执行相同操作。像所有JavaScript一样对象,对象[namevariable]也可以使用。或者,更好的是,添加ID并使用明确的document.getElementById方法。)
通过将绑定移动到脚本中,您还可以删除onclick属性的内联JavaScript,使标记更加清晰:
<input type="text" class="number" name="something" />
...
<script type="text/javascript"> // external script is best, linked after all forms
function numberfield_bind() {
var inputs= document.getElementsByTagName('input');
for (var inputi= inputs.length; inputi-->0;)
if (inputs[inputi].className=='number')
inputs[inputi].onchange= numberfield_change;
}
function numberfield_change() {
this.value= this.value.split(',').join('');
}
numberfield_bind();
</script>