JavaScript: имена динамических полей - PullRequest
2 голосов
/ 11 ноября 2008

HI All,

У меня есть фрагмент 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 передают правильные значения ... имя поля и его значение.

Как мне сделать это динамически?

* 1016 Джейсон *

Ответы [ 5 ]

4 голосов
/ 11 ноября 2008

Вы можете использовать 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 для подобных вещей. Вы можете установить класс как «валюта» для каждого входа, а затем использовать этот фрагмент Javascript на основе jQuery для обработки всего:

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

Этот код срабатывает при готовности документа, прикрепляет обработчик событий к каждому вводу с валютой в качестве своего класса, а затем выполняет замены. Обратите внимание, что вам не нужно регулярное выражение для замены.

3 голосов
/ 11 ноября 2008

Если вы кодируете это прямо в разметку, например, onblur = "replaceCommaInCurrency (this)", элемент управления, инициирующий событие, передается в качестве параметра. Тогда вы должны быть в состоянии сделать что-то вроде:

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

с JQuery:

var jqField = $(myField);
jqField.val(jqField.val().replace(re, ''));  
1 голос
/ 11 ноября 2008

Как правило, вы должны использовать платформу, которая будет обрабатывать низкоуровневые функции, подобные этой, но конкретный ответ на ваш вопрос - использовать скобку для имени поля:

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

  document.net1003Form[myField].value=val.replace(re, '');
}
0 голосов
/ 11 ноября 2008
Решение

flatline и roenving с «this» является более чистым подходом, оно также позволяет избежать проблем с «document.formname.fieldname».

(Используйте «document.forms.formname» для доступа к форме без возможного конфликта на формах, имеющих то же имя, что и элементы объекта документа, и «forms.elements.fieldname», чтобы сделать то же самое с полями. Как и все JavaScript объект, объект [namevariable] также могут быть использованы. Или, лучше, добавить идентификаторы и использовать однозначный метод document.getElementById.)

Переместив привязку в скрипт, вы также можете удалить встроенный JavaScript атрибута onclick, что сделает разметку более чистой:

<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>
0 голосов
/ 11 ноября 2008
    function removeCommaInCurrency(myField)
    {
            var re = /,/g;

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

- и затем назовите это так:

<input type="text" name="..." onchange="removeCommaInCurrency(this);">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...