将 this.value 传递给 JS 中的函数,然后更改该值

Passing this.value to a function in JS and then changing that value

本文关键字:然后 函数 value this JS      更新时间:2023-09-26

我正在编写一个JS函数,我希望它直接与onfocus事件一起使用,也可以在另一个函数中使用。问题是,如果我传递函数这个,那么我所有的函数代码都需要是field.value。当我在函数中使用它时,这会导致问题,因为传递的变量没有 .value 属性。

我当时的想法是将this.value传递给函数,这样我就可以处理传递的数据,无论是字段值还是函数值。但是,现在它不会更改原始字段的值。

有没有解决这个问题的好方法,或者我只需要有两个功能?

这是我的两个不同版本的代码:

// Can't be used with when using onfocus="makeNum(this.value)"
function makeNum(value){
    value = value.match(/'d+('.'d{1,2})?/g).join("");
}

// Can't be used with a function, but works when using makeNum(this)
function makeNum(field){
    field.value = field.value.match(/'d+('.'d{1,2})?/g).join("");
}

对象通过引用传递,但基元按值传递。由于this.value是一个原语(例如字符串或数字),因此当您将其传递给函数时,它将被复制,并且对它的修改仅应用函数。

编写函数,使其返回一个值,然后将其赋回this.value如下所示:

this.value = makeNum(this.value);
function makeNum(value){
    return value.match(/'d+('.'d{1,2})?/g).join("");
}

如果您展示了所需代码的两种风格,我们可能会提供更具体的帮助。 对象是通过引用传递的,但单个变量不是,因此不能对两者具有相同的行为。

我能想到的选择是这样的:

  1. 将对象作为参数传递到函数中,然后引用obj.value以更改原始对象上的实际值。

  2. 将回调函数传递给对对象进行操作的主函数,然后可以使用几种不同的方法来设置来自同一核心代码的值。

  3. 将核心函数分解为较小的函数,这些函数可以从不同位置调用,并在对不同类型的源数据进行操作时以不同的方式使用。

  4. 编写一个函数,该函数可以从其参数中判断您传递给它的数据类型并相应地操作。

对于您的代码示例,下面是可以通过几种不同方式使用的核心函数:

function makeNum(value){
    return(value.match(/'d+('.'d{1,2})?/g).join(""));
}
x.onfocus = function() {
    this.value = makeNum(this.value);
}