Javascript 一个函数返回多个文本框的结果

Javascript 一个函数返回多个文本框的结果,javascript,jquery,html,Javascript,Jquery,Html,我是javascript新手。我已经根据更改时的文本框Id编写了代码,但是我需要通过一个函数将代码格式化为函数调用。是否可以为不同的文本框返回不同的值 HTML: <input type="text" name="a" id="1" /> <input type="text" name="b" id="2" /> <input type="text" name="result1" id="result1" /> <input type="text"

我是javascript新手。我已经根据更改时的文本框Id编写了代码,但是我需要通过一个函数将代码格式化为函数调用。是否可以为不同的文本框返回不同的值

HTML:

<input type="text" name="a" id="1"  />
<input type="text" name="b" id="2"  />
<input type="text" name="result1" id="result1" />

<input type="text" name="c" id="3"  />
<input type="text" name="d" id="4"  />
<input type="text" name="result2"  id="result2"/>
$(document).ready(function(){
    $("#result1").change(function(){
        var a = document.getElementById("a").value;
        var b = document.getElementById("b").value;
        document.getElementById("result1").value = (a+b); 
    });
    $("#result2").change(function(){
        var c = document.getElementById("c").value;
        var d = document.getElementById("d").value;
        document.getElementById("result2").value = (c+d);
    });
});

我认为统一的功能应该是-

$("#result1, #result2").change(function(){
var a = document.getElementById(this.id + "-a").value;
var b = document.getElementById(this.id + "-b").value;
this.value = (a + b); 
});
这是上下文。在事件侦听器函数中,上下文是触发事件的元素,因此当
result1
触发事件时,
this
将是
result1
元素

关于
a
b
,您在这里混淆了
名称
id
值。如果这两个元素的ID是随机的,那么除了使用两个不同的函数外,您无法做任何稳定的事情(如果元素的顺序稍有改变,代码可能会失败)。我的建议是为他们提供适当的上下文ID,这样就不用
1
a
,而是
result1-a
result2-a
等等。然后你可以预先设置
这个
的ID,一切都应该正常

一般提示-ID应该以字母而不是数字开头,因为数字在CSS(3)中不匹配


至于
$(“#result1,#result2”)
部分,就像BhushanKawadkar建议的那样,可以将其更改为
$(“[id^=\“result\”)
,然后您不必指定每个id。

您考虑过jQuery吗?然后您可以通过(例如)相同的类来选择元素。 所以如果我是你,我会这样做

<textarea class="textbox">ABC</textarea>
<textarea class="textbox">DFC</textarea>
此处的工作示例: 然后在更改任何内容后-它将返回其值

注:这可以用于任何字段:输入、选择等。jQuery意味着乐趣;)。

您可以使用如下所示的“从开始”jQuery选择器

在这里,它将触发
id
的所有输入文本的更改事件,该事件以
result
开头,即
result1
result2
等等

它将获取前面两个文本框的值…并将总和指定给结果框

$(document).ready(function(){
$("[id^='result']").change(function(){
  var value1 = $(this).before().val();
  var value2 = $(this).before().before().val();
    $(this).val(value1+value2);
});
});
但若您遵循相关的ID或类,那个么您就可以很容易地做到这一点,尽管您正在更改html元素的位置

考虑以下代码,其中指定了与结果文本框相关的特定id:

<input type="text" name="a" id="first_1"  />
<input type="text" name="b" id="second_1"  />
<input type="text" name="result1" id="result_1" class="result" />

<input type="text" name="c" id="first_2"  />
<input type="text" name="d" id="second_2"  />
<input type="text" name="result2"  id="result_2" class="result"/>
请看一下Html

<input type="text" name="a" id="1"  />
<input type="text" name="b" id="2"  />
<input type="text" name="result1" id="result1" class="result" />

<input type="text" name="c" id="3"  />
<input type="text" name="d" id="4"  />
<input type="text" name="result2"  id="result2" class="result"/>

我不确定您为什么要监听结果框的更改事件。它应该绑定到值框

如果您想要一个函数来完成这一切,您可以将一个类名设置为all value box,然后监听它的更改事件

<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="jquery-1.9.1.js"></script>
<script>
$(document).ready(function(){
$(".num-box").change(function(){
    if ($(this).hasClass('type1')) {
        var a = $("[name=a]").val();
        var b = $("[name=b]").val();
        $("[name=result1]").val(parseInt(a)+parseInt(b));
    } else if ($(this).hasClass('type2')) {
        var c = $("[name=c]").val();
        var d = $("[name=d]").val();
        $("[name=result2]").val(parseInt(c)+parseInt(d));
    }
});
});
</script>
</head>
<body>
<input type="text" name="a" class="num-box type1" value=0 />
<input type="text" name="b" class="num-box type1" value=0 />
<input type="text" name="result1" />
<input type="text" name="c" class="num-box type2" value=0 />
<input type="text" name="d" class="num-box type2" value=0 />
<input type="text" name="result2" />
</body>
</html>

提供头衔
$(文档).ready(函数(){
$(“.num框”).change(函数(){
if($(this).hasClass('type1')){
var a=$(“[name=a]”).val();
var b=$(“[name=b]”).val();
$(“[name=result1]”)val(parseInt(a)+parseInt(b));
}else if($(this).hasClass('type2')){
var c=$(“[name=c]”).val();
var d=$(“[name=d]”).val();
$(“[name=result2]”)val(parseInt(c)+parseInt(d));
}
});
});

看起来您误解了
name
id
。首先,
id
不能以数字开头。其次,
getElementById
按id(而不是名称)获取元素。第三,如果您想使用jQuery,应该使用
$('.\a').val()
$('[name=a]'))
而不是
document.getElementById('a')。value
@h2oooooo
id不能以数字开头
它可以在兼容HTML5的浏览器(和doctype)中使用,但不应该,因为CSS3仍然不支持它;){CSS4将}您最好重新考虑HTML标记的逻辑,使用一些容器和类,而不是IDS。您应该使用
$(“[name=a],[name=b]”)绑定事件,而不是
$(“#result1”)
@a.Wolff不知道这一点-为什么他们要更新HTML5标准而不发布早期版本的CSS4(CSS3.5?)支持它?!我想不出一个网站不使用CSS。但这两个函数应该输出到不同的元素?我添加了一个解释。第一个函数添加a+b,第二个添加c+d,这一事实如何?我没有注意到,我会相应地更改答案。我只需要一个函数,例如calc(){它应该调用要添加的两个值并显示在相应的文本框中}您的示例与手头的问题并不相关。虽然有效,但由于对结构的依赖,这些解决方案是脆弱的。如果元素移动,整个过程就会中断。但这适用于给定的结构,如果结构不固定,则没有人能给出通用解决方案。那么应该有一些类模式用于ide识别html元素…这不是错误的答案。让@Navaneetha Krishnan来决定这是否有用…否决票并不意味着它一定是错误的。我认为它太脆弱了,其他人可能不同意。海报可以决定他们想要什么,不管我的评论或否决票。如果没有否决票,那么每个答案都是脆弱的y特定的html模式(可能使用结构、css等)…您能给我一个解决方案吗…ID不太可能被更改,逻辑容器不太可能被更改,但顺序更可能被更改。
<input type="text" name="a" id="1"  />
<input type="text" name="b" id="2"  />
<input type="text" name="result1" id="result1" class="result" />

<input type="text" name="c" id="3"  />
<input type="text" name="d" id="4"  />
<input type="text" name="result2"  id="result2" class="result"/>
$('.result').blur(function(){
var result;
    if($(this).attr("id")=="result1")
    {
        result=parseInt($('#1').val())+parseInt($('#2').val());
       $(this).val(result);

    }
    else if($(this).attr("id")=="result2")
    {
        result=parseInt($('#3').val())+parseInt($('#4').val());
      $(this).val(result);
    }
});
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="jquery-1.9.1.js"></script>
<script>
$(document).ready(function(){
$(".num-box").change(function(){
    if ($(this).hasClass('type1')) {
        var a = $("[name=a]").val();
        var b = $("[name=b]").val();
        $("[name=result1]").val(parseInt(a)+parseInt(b));
    } else if ($(this).hasClass('type2')) {
        var c = $("[name=c]").val();
        var d = $("[name=d]").val();
        $("[name=result2]").val(parseInt(c)+parseInt(d));
    }
});
});
</script>
</head>
<body>
<input type="text" name="a" class="num-box type1" value=0 />
<input type="text" name="b" class="num-box type1" value=0 />
<input type="text" name="result1" />
<input type="text" name="c" class="num-box type2" value=0 />
<input type="text" name="d" class="num-box type2" value=0 />
<input type="text" name="result2" />
</body>
</html>