JavaScript数学函数

3

我该如何使用这些JavaScript 数学函数

例如,我想计算表单中所有<input>的平方值,而不需要提交表单。

可以给一个小例子吗?谢谢。


11
请勿将w3schools作为学习JavaScript(或其他任何内容)的资源。 http://w3fools.com - Andy E
你误解了我(或者我无法解释清楚)。我不太懂 JavaScript。所以我需要一个简单的示例,它返回所有<input>的平方值,例如。 - Eray
@Eray 考虑开一个新问题,但要更详细地描述,并可能向我们展示您已经拥有的代码。 - Tom Gullen
2
@Tom,他们误解了我的意思,评论真的很有趣 :) (例如BoltClock的评论“不知道JavaScript怎么可能知道jQuery?”)。也许我无法解释清楚。问题已经编辑过了。你可以再次检查,但问题已经关闭了。 - Eray
你所需做的就是获取所有字段的值,例如:var field1 = document.getElementById(“field1”).value; 然后对结果进行任何操作,例如 alert(Math.sqrt(field1))。 对于简单的事情,避免使用JQuery,它会使问题变得过于复杂化,我不知道为什么人们要在如此琐碎的任务中使用它。 - Tom Gullen
显示剩余7条评论
7个回答

7
JQuery不需要支持数学函数,因为它是JavaScript的附加库,您仍然可以在JQuery代码中使用JavaScript,因此您仍然可以使用所有本机数学函数。
示例: 加法
var x = 1;
var y = 2;
var lol = x+y;
alert(lol);

减法

var x = 10;
var y = 1;
var lol = x-y;
alert(lol);

编辑:现在我们更好地理解了你的问题...

<input type="text" id="field1" value="16" />
<input type="text" id="field2" value="25" />
<input type="text" id="field3" value="36" />

var field1Value = document.getElementById("field1").value;
var field2Value = document.getElementById("field2").value;
var field3Value = document.getElementById("field3").value;

alert(Math.sqrt(field1Value ));
alert(Math.PI * field2Value);
alert(Math.sin(field3Value));

@Eray Alakese:不了解JavaScript怎么可能知道jQuery呢? - BoltClock
1
@BoltClock:不幸的是,你刚才提到的已经成为常态而非例外。 - casablanca
@BoltClock,:D。你误解了我的意思。问题已经编辑过了。你可以查看一下。谢谢。 - Eray

2
您可以使用each()(文档)循环来处理每个单独的输入。 点击此处测试一个工作示例。 (jsFiddle)
$('a.square').click(function() {
    $('#myform :text').each(function() {
        this.value *= this.value;
    });
});

$('a.square_root').click(function() {
    $('#myform :text').each(function() {
        this.value = Math.sqrt(this.value);
    });
});

当任意一个链接被点击时,它会查找myform中的所有text输入,并对它们进行迭代。
在每个函数内部,this指向当前的input元素。

1
$('#myform :text').val(function(i,v) { return v*v; }); 可以翻译为: - Šime Vidas

1

JavaScript 是一种编程语言,而不是 jQuery,它是一个用 JavaScript 编写的 Web 应用程序库。要有效地使用 jQuery,您需要了解 JavaScript。

然而,可以使用 jQuery 的功能轻松地同时处理多个文本框:

// Set each single-line textbox's value to the square
// of its numeric value, if its value is in fact a number.
$('input:text').each(function() {
    var num = +this.value;
    if(!isNaN(num)) {
        this.value = num * num;    // or Math.pow(num, 2)
    }
});

1

如果jQuery有一个reduce()函数,那将非常有用。

在处理数据列表时,大多数函数式语言,以及现今的大多数传统语言,都有执行整个列表上重复功能的方法,依次取每个元素并对其应用函数。

其中最简单的是map,它由jQuery为您实现。它接受一个列表并对每个元素应用一个函数,并返回结果列表,每个条目对应一个结果。例如:[1,2,3] -> (map x2) -> [2,4,6]

有时候你需要从一个列表中得到总和或者集合结果,而不是单个映射的列表。这就是 reduce(或者 fold)操作的用处。不幸的是,jQuery 没有这个方法可用,所以下面提供了一个插件。一个 reduce 函数接受一个累加器值和当前元素的值,并返回修改后的累加器,它将传递给下一次调用。例如:[1,2,3,4] -> (reduce + [initial:0]) -> 10 = ( ( ( (0 + 1) + 2 ) + 3 ) + 4 ) 或者 ([1,2,3,4] -> (reduce * [initial:1]) -> 24 = ( ( ( (1 * 1) * 2 ) * 3 ) * 4 )
(function($) {
    $.reduce = function(arr, callback, initial) {
        var accumulator = initial || 0;

        $.each(arr, function(index, value) {
            accumulator = callback(accumulator, value, index);
        });

        return accumulator;
    }
})(jQuery);

然后你可以像这样使用它来得到一个平方和:

var answer = $.reduce($('input:text'), function(acc, elem) {
    var cVal = $(elem).val();
    return acc + cVal * cVal;
}, 0);

你可能需要解释一下reduce的含义。如果他在使用Math库时遇到了麻烦,他可能不理解reduce是什么意思。 - Raynos
另一个要点是,您可以检查在Firefox和Chrome中实现的array.reduce。本地代码始终运行更快。 - Raynos
@Raynos:非常正确,我倾向于忽略在所有浏览器中都不存在(至少以某种格式存在)的函数的存在。但是,如果处理得当,实现可以使用底层函数(如果可用)。 - Orbling

1

我也在寻找解决方案,看到了很多这里的问题都无法解决(包括这个),如果有人像我一样想知道,这是我的有效解决方案:

$("#apport").keyup( 
function(){
var apport = parseFloat($("#apport").val());
var montant = parseFloat($("#montant-financer").val());
var moinmontant = parseFloat(montant) - parseFloat(apport);     
$("#montant-financer").val(moinmontant);    
}
);

所有id选择器都是输入。

0
使用jQuery map函数创建一个数组。
$('input:text').map(function() {
  return this.value * this.value; // math calculation goes here
}).get();

查看实时示例


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接