【问题标题】:Update a javascript array's values with values from a textbox使用文本框中的值更新 javascript 数组的值
【发布时间】:2014-05-05 14:09:16
【问题描述】:

我正在尝试使用 JavaScript 使用文本框中的值更新数组“plotMe”的值。使用 pop() 可能会有所帮助,但不确定我是否需要类似的 for 语句 for (var i=0; i<array.length; i++){ do something here? };我只是不知道该怎么做。 任何帮助将不胜感激。

var plotMe1= [[1,2], [3,4], [5,6]];

<form>
x1: <input type="text" name="x1"/>
y1: <input type="text" name="y1"/><br/>
x2: <input type="text" name="x2"/>
y2: <input type="text" name="y2"/><br/>
x3: <input type="text" name="x3"/>
y3: <input type="text" name="y3"/><br/>
</form>

【问题讨论】:

  • 您想要哪个更新? Html -> JS 数组?还是 JS 数组 -> HTML?你还在页面中使用jquery吗?还是纯javascript?
  • 谢谢。我想用文本框中的值更新绘图值。因此,可以说绘制的值是最新的。然后我在文本框中输入不同的值,单击按钮或 onkeyup,数组中的值被更新,从而改变绘图。没有 JQuery,纯 JavaScript 和 HTML -> JavaScript。
  • 我已经在下面发布了一个答案,希望对您有所帮助。

标签: javascript arrays


【解决方案1】:

如果你能稍微改变一下 HTML,试试这个 -

var plotMe1= [[1,2], [3,4], [5,6]];

<form>
x1: <input type="text" class="x" name="x1"/>
y1: <input type="text" class="y" name="y1"/><br/>
x2: <input type="text" class="x" name="x2"/>
y2: <input type="text" class="y" name="y2"/><br/>
x3: <input type="text" class="x" name="x3"/>
y3: <input type="text" class="y" name="y3"/><br/>
</form>

我使用的是 jQuery,所以代码是 -

$("input").on('keyup', function(){
    var x = $.map($("input.x").toArray(), function(e){
         return $(e).val();
    });
    var y = $.map($("input.y").toArray(), function(e){
         return $(e).val();
    });
    plotMe1 = [];
    for(var i = 0; i < x.length; i++){
         plotMe1[i] = [x[i], y[i]];
    }
});

给你,如果你愿意,这也将帮助你使用更多的输入。我还没有测试过小提琴,但应该可以。

但是,如果您不能随意更改 HTML,请尝试以下代码 -

$("input").on('keyup', function(){
        var x = $.map($("input[name^='x']").toArray(), function(e){
             return $(e).val();
        });
        var y = $.map($("input[name^='y']").toArray(), function(e){
             return $(e).val();
        });
        plotMe1 = [];
        for(var i = 0; i < x.length; i++){
             plotMe1[i] = [x[i], y[i]];
        }
    });

我个人不喜欢第二种方法,因为如果搜索名称以xy 开头,因此如果有更多以这些开头但目的不同的输入可能会导致错误,我建议第一种方法,使用特定输入的类。

【讨论】:

  • 我忘了parseInt的值,所以当你使用时使用parseInt($(e).val())而不是$(e).val()
  • 好的,再次感谢您。让我看看我该怎么做。我实际上正在使用 D3。因此,我将尝试从这里自行完成。感谢您的帮助。
  • 感谢您抽出宝贵时间提供帮助!
【解决方案2】:

您可以通过以下方式更改 plotMe1 的值:

plotMe1[0][0]=9;

并在文本字段更改时动态更改它:

x1: <input type="text" name="x1" onkeyup="update_plotMe(this)">

然后是一个函数

function update_plotMe(o){
    if(o.name=='x1'){
        plotMe1[0][0]=o.value;
    }
}

如果您有很多图,您将希望动态读取输入字段的名称(本例中为 o.name)并计算图,这样您就不会有一堆 if/else 语句

编辑:>> 不使用 If/Else ...

<script>
var plotMe1= [[1,2], [3,4], [5,6]];

function update_plotMe(o){
    var char1=o.name.substr(0,1);
    var char2=o.name.substr(1,1);

    var pos1=parseInt(char2)-1;
    var pos2=(char1=='y')?(1):(0);

    plotMe1[pos1][pos2]=o.value;
}
</script>


<form>
x1: <input type="text" name="x1" onkeyup="update_plotMe(this)"/>
y1: <input type="text" name="y1" onkeyup="update_plotMe(this)"/><br/>
x2: <input type="text" name="x2" onkeyup="update_plotMe(this)"/>
y2: <input type="text" name="y2" onkeyup="update_plotMe(this)"/><br/>
x3: <input type="text" name="x3" onkeyup="update_plotMe(this)"/>
y3: <input type="text" name="y3" onkeyup="update_plotMe(this)"/><br/>
</form>

【讨论】:

  • 谢谢。我会试试这个。虽然我认为我可能需要一个功能不?更新所有数组值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多