0

我正在尝试,/JavaScript 替换并编写下面的代码。表单中有多个可用的文本框。我想编写一个函数并在所有文本字段上调用它们。

我遇到的问题是我无法将当前 ID 发送到 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第一行。

4

3 回答 3

3

您将单击的元素传递给您的函数,因此您根本不需要document.getElementById()。这解决了你的问题。

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

另请注意,在元素的值更改之前onkeypress触发。如果您想使用 的最后更新值,您可以使用或者更确切地说。inputonkeyuponinputinput

如果你真的必须使用id元素的,你需要在参数中传递它:

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

然后还删除周围的引号val

var values = document.getElementById(val).value;
于 2013-08-18T17:16:16.503 回答
2
document.getElementById('val')

应该

document.getElementById('one')

如果您进行此更改,则无需将其发送到removeComma

如果您保留,请使用以下功能

function removeComma(val) {
    var values = val.value;
    var n=values.replace(/,/, "/"); 
    val.value=n;
}
于 2013-08-18T17:09:40.637 回答
1

它应该是...

document.getElementById(val).value

...相反,因为您可能会分别为每个输入文本框调用此函数,将它们的 id 作为参数发送到函数中。

更新: ...您的编辑清楚地表明即使不是这种情况:您正在将元素本身传递给函数。这很好,但是你不必照顾那个元素document.getElementById——你已经有了它。

不过,这里还有另一个问题:如果您需要替换所有逗号,则需要/g向该正则表达式添加修饰符。否则多个逗号(例如通过复制粘贴添加)将不会被替换。

总的来说,我会这样重写它:

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

这是一个可以玩的小提琴(这里是它的forkoninput处理程序一起工作 - 在我看来,后者更平滑)。

于 2013-08-18T17:11:19.703 回答