2013-08-18 5 views
-1

Я пытаюсь заменить , на / в JavaScript и нарисовал код ниже. В форме доступно несколько текстовых полей. Я хочу написать одну функцию и вызвать их во всех текстовых полях.замена запятых на косые черты в JavaScript

Проблема, с которой я столкнулся, заключается в том, что я не могу отправить текущий идентификатор методу JavaScript. Как это правильно сделано?

function removeComma(val) { 
    var values = document.getElementById('val').value; //Object Required Error 
    var n=values.replace(/,/, "/"); 
    document.getElementById('val').value=n; 
} 

<input type="text" id="one" name="one" onkeypress="removeComma(this)"> 
<input type="text" id="two" name="two" onkeypress="removeComma(this)"> 
<input type="text" id="three" name="three" onkeypress="removeComma(this)"> 

ошибка, что я получаю от выше код OBJECT REQUIRED на первой линии.

ответ

1

Это должно быть ...

document.getElementById(val).value 

... вместо того, чтобы, как вы, вероятно, будет вызывать эту функцию для каждого входного текстового поля отдельно, отправляя свои идентификаторы в качестве параметров в функцию.

UPDATE: ... и ваша правка ясно показывает, что даже это не так: вы пропускание элемента непосредственно в функцию. Это хорошо, но тогда вам не нужно следить за этим элементом с помощью document.getElementById - у вас его уже есть.

Все еще есть еще одна проблема: если вам нужно заменить все запятые, вам нужно добавить модификатор /g к этому регулярному выражению. В противном случае не будут заменены несколько запятых (добавленных путем копирования).

В целом, я бы переписать так:

function removeComma(el) { 
    el.value = el.value.replace(/,/g, '/'); 
} 

Вот fiddle играть (а вот его fork работает с oninput обработчиков вместо - на мой взгляд, последний является более гладким).

+0

уже есть. var values ​​= document.getElementById ('val'). Значение – user2581072

+1

'' val'' - это _string_. 'val' - выражение, оценивающее значение переменной с именем' val'. В этом примере использование строковых литералов не имеет никакого смысла. – raina77ow

+0

@ скрипка raina77ow - самый многоразовый метод. глобальный флаг является важным дополнением. – Daniel

2
document.getElementById('val') 

должен быть

document.getElementById('one') 

Если вы сделаете это изменение не нужно отправить на removeComma.

Если вы держите этот затем использовать следующую функцию

function removeComma(val) { 
    var values = val.value; 
    var n=values.replace(/,/, "/"); 
    val.value=n; 
} 
+0

Он работает один ввод. Я хочу передать ID как параметр. Если у меня есть несколько входных данных, то как использовать одну и ту же функцию для нескольких входов. – user2581072

+0

Я только что обновил свой ответ. – Krasimir

+0

Хорошая копия-паста из ответа Teemu. – JJJ

2

Вы передаете элемент с нажатой кнопкой мыши, поэтому вам не нужно document.getElementById(). Это устраняет вашу проблему.

function removeComma(val) { 
    var values = val.value; 
    var n=values.replace(/,/g, "/"); 
    val.value=n; 
} 

Обратите также внимание, что onkeypress обжигают перед тем значение input элемента изменяется. Вы можете использовать onkeyup или, скорее, oninput, если хотите использовать последнее обновленное значение input.

Если вы действительно должны использовать id элемента, вам нужно передать его в качестве аргумента:

<input type="text" id="one" name="one" onkeypress="removeComma(this.id)"> 

, а затем и удалить кавычки val:

var values = document.getElementById(val).value;