JavaScript: динамические имена полей

Всем привет,

У меня есть кусок javaScript, который удаляет запятые из предоставленной строки (в моем случае значения валюты)

Это:

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

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

«MyField» - это моя попытка динамически выполнить эту работу для любого поля, которое я передаю, но это не работает, я получаю сообщения об ошибке «MyField» недействителен. Я вроде как получил, но думал, что это действительно так.

Я вызываю, используя: onBlur = "replaceCommaInCurrency (this.name, this.value); return false;"

this.name и this.value передают правильные значения ... имя поля и его значение.

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

-Джейсон

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
8 974
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

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

с jQuery:

var jqField = $(myField);
jqField.val(jqField.val().replace(re, ''));  
Ответ принят как подходящий

Вы можете использовать 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(',', '');
    })
});

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

Если вы когда-нибудь сможете избежать использования eval-функции, вам следует, поскольку она является самой потребляющей функцией во всем мире ECMAscript ...

roenving 11.11.2008 03:14

Вы можете этого избежать. Используйте квадратные скобки.

bart 11.11.2008 03:16
    function removeCommaInCurrency(myField)
    {
            var re = /,/g;

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

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

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

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

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

  document.net1003Form[myField].value=val.replace(re, '');
}

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

(Используйте 'document.forms.formname' для доступа к форме без возможного столкновения с формами, имеющими то же имя, что и члены объекта документа, и 'forms.elements.fieldname', чтобы сделать то же самое с полями. Как и все объекты JavaScript, object Также можно использовать [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>

Другие вопросы по теме