Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用计算结果填充文本框_Javascript_Jquery - Fatal编程技术网

Javascript 用计算结果填充文本框

Javascript 用计算结果填充文本框,javascript,jquery,Javascript,Jquery,我有一个表单,用户输入价格和数量,在鼠标离开“数量”文本框后,我希望TotalPrice文本框填充价格*数量的结果。下面是我的jQuery代码,但是TotalPrice文本框没有填充结果。希望有人能建议我如何去做它的权利 $("#quantity").mouseleave (function () { var i = $("#price").val(); var k = $("#quantity").val(); var total = i*k; $("#tota

我有一个表单,用户输入价格和数量,在鼠标离开“数量”文本框后,我希望TotalPrice文本框填充价格*数量的结果。下面是我的jQuery代码,但是TotalPrice文本框没有填充结果。希望有人能建议我如何去做它的权利

$("#quantity").mouseleave (function () {
    var i = $("#price").val();
    var k = $("#quantity").val();
    var total = i*k;
    $("#totalprice").val(total);
});

代码的问题在于,只要调用
ready
函数,它只执行一次。 您需要将listner附加到action元素

$(document).ready(function() {
    $("#quantity").mouseleave(function(){
        var i = $("#price").val();
        var k = $("#quantity").val();
        var total = i*k;    
        $("#totalprice").val(total);  
    });         
});

您可以使用各种事件列表器,如onchange、onfocusout、blur、onkeyup,具体取决于您希望更改发生的方式和时间。有关事件类型和仅用于jquery的所有事件的更多信息-

您需要使用这两个文本框的
blur
事件处理程序。试试这个:

$(document).ready(function() {
  $("#price").on("blur", calculate);
  $("#quantity").on("blur", calculate);
  //If you want to do the calculation when the page renders:
  calculate();
});

function calculate(){
  var i = $("#price").val();
  var k = $("#quantity").val();
  var total = i*k;    
  $("#totalprice").val(total);                
}
正如trincot在下面的评论中提到的,您可以将两个事件合并到一行中,因为它们调用相同的函数:

$("#price, #quantity").on("blur", calculate);
我想你想要这个

jQuery(document).ready(function($) {
    var price = $("#price");
    var qty = $("#quantity");
    var total = $("#totalprice");
    /* CREATE VARIABLES ON DOCUMENT READY, 
       BECAUSE YOU WANT TO CACHE THE DOM SELECTION */
    qty.on("blur", function(){
         var i = price.val();
         var k = qty.val();
         total.val(i * k);
    });
});


工作小提琴==>

在OP中显示所有相关代码。。js和htmlYou需要在这两个文本框的
blur
事件处理程序中包装相同的代码。要绑定事件,请使用
$('selector1,selector2').blur(function(){//Same code here})。我认为你应该为此创建一个小提琴。只需考虑一点,不要太抓紧鼠标离开,因为用户可以使用制表符退出该字段或在触摸设备/屏幕上。因此,检查视场何时失去焦点。我没有鼠标。我使用TAB键四处移动。您可以使用各种事件。例如:-onchange、onfocusout、blur。只要找出适合你需要的活动。您甚至可以使用onkeyup()事件来执行实时执行。如果您使用focusoutDownvoter更改mouseleave,这应该会起作用。请告诉我原因,以便我可以为相同的原因改进代码。从您的答案的注释中可以明显看出downvotes的原因。注意:我不是向下投票人。检查两个字段是否都有值不是更好吗?否则的话,结果会很糟糕inaccurate@Tushar只有当页面呈现时这两个字段具有值时,才需要这样做。我将添加一条注释。@DarrenSweeney当然可以,但验证不是问题的一部分。或者:
$(“价格,数量”)。关于(“模糊”,计算)@trincot我总是希望它们分开,但我会把它添加到答案中。托尼。我只是想知道,为什么要在开始时加载整个dom,而不是只加载函数中的值?它写在命令中,为什么要在注释中大喊大叫?我不是大喊大叫,只是为了高亮显示,因为每次模糊时,他都需要从输入中读取值,这样更好。在init上稍微慢一点,但对于下一次计算来说,这是一种更快的方式。