繁体   English   中英

JavaScript:动态字段名称

[英]JavaScript: Dynamic Field Names

大家好,

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

您可以使用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工具包来做这样的事情。 你可以在每个输入上设置一个类似“currency”的类,然后使用这个基于jQuery的Javascript片段来处理所有事情:

$(function(){
    $("input.currency").bind('blur', function(){
        this.value = $(this).val().replace(',', '');
    })
});

此代码将触发文档就绪,将事件处理程序附加到每个输入,并使用currency作为其类,然后执行替换。 请注意,您也不需要正则表达式进行替换。

如果你将它编码到这样的标记中,例如onblur =“replaceCommaInCurrency(this)”,则发起事件的控件将作为参数传递。 然后你应该能够做到这样的事情:

myField.value = myField.value.replace(re, '');

用jQuery:

var jqField = $(myField);
jqField.val(jqField.val().replace(re, ''));  

通常,您应该使用一个能够处理此类低级功能的框架,但您问题的具体答案是对字段名称使用括号表示法:

function replaceCommaInCurrency( myField, val)
{
  var re = /,/g;

  document.net1003Form[myField].value=val.replace(re, '');
}
    function removeCommaInCurrency(myField)
    {
            var re = /,/g;

            myField.value=myField.value.replace(re, '');
    }

- 然后像这样调用它:

<input type="text" name="..." onchange="removeCommaInCurrency(this);">

flatline和roenving的'this'解决方案是更清晰的方法,它也避免了'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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM