在多个文本框上同时应用onkeyup功能

时间:2015-11-21 13:28:41

标签: javascript php

假设我有一个1 + 7文本框的列。第一个框的名称是mm1,其他框分别是dd1,dd2,....,dd7。我想编写一个javascript函数,以便文本框dd1,dd2,...,dd7中的所有值都乘以N,如果我将N放在第一个文本框中,即mm1。我可以编写javascript函数,但如何在所有框中同时生效?我试过以下代码。但它只能影响一个盒子,具体取决于$ i的值。如果我们可以为$ i创建一个取值为1到7的循环,那么问题可能会得到解决。任何线索请。

<?php $i=3?>
<input type="text" size="1" id="mm1" name="mm1" 
maxlength="2"  onfocus="this.select()"    
onkeyup="gft('dd<?php echo $i?>', 'mm1')"
>

3 个答案:

答案 0 :(得分:0)

试试这个,使用class逻辑分组元素......

$('.mult').each(function(i,v){
            var tt = parseFloat($(this).val());
            $(this).attr('data-val',$(this).val());
});
$('.myVal').on('keyup',function(e){
    var t = $(this).val();
    if(!t) t = 0;
    $('.mult').each(function(i,v){
            if(t>0){
                var tt = parseFloat($(this).attr('data-val')) * t;
                $(this).val(tt);
            }
    });
});

找工作小提琴here

答案 1 :(得分:0)

我只使用JavaScript(没有jQuery)创建了JSFiddle

HTML

v

的JavaScript

scala> valToString(True)(23)
res0: String = 23

scala> valToString(False)("foo")
res1: String = foo

我添加了一些功能来记住文本框最初的值。但是,如果您专门更改了7个文本框中的一个会成倍增加,您仍然可以更改它。

修改

如果您希望在更改其中一个值后将其相乘,也可以添加此项:

<input type="number" onkeyup="multiply(this)"/>

<input type="number" value="1" class="multiply-this"/>
<input type="number" value="2" class="multiply-this"/>
<input type="number" value="3" class="multiply-this"/>
<input type="number" value="4" class="multiply-this"/>
<input type="number" value="5" class="multiply-this"/>
<input type="number" value="6" class="multiply-this"/>
<input type="number" value="7" class="multiply-this"/>

JSFiddle

答案 2 :(得分:0)

function gft(x){
    n = 5;
    c = x * n;
    textInputs[0].value = c;
    textInputs[1].value = c;
    textInputs[2].value = c;
}

var textInputs = document.querySelectorAll('input[type=text]');
//this eventlistener is made to listen for key movement on all text fields that are of type text
for(i=0;i<textInputs.length;i++){
    textInputs[i].addEventListener('keyup',function(){
        //gft will execute an equation whenever one of these fields change
        //also, it will change all the values inside the textfield simultaneously
        gft(this.value);
    },false);
}