JavaScript:动态字段名称

时间:2008-11-10 23:42:41

标签: javascript parsing

全部好,

我有一段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

5 个答案:

答案 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)

使用'this'的flatline and roenving解决方案是更清晰的方法,它还避免了'document.formname.fieldname'的问题。

(使用'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>