2012-04-20 86 views
0

我想为我开发的网站构建一个自定义计算器。我是一名新开发人员,这有点凌驾于我的头上,但我正在努力学习。一个变量打破我的代码

我想抓住2个变量并将它们合并为1,然后使用它通过ajax从另一个页面调用div。那么我遇到的问题是,当我添加代码来结合2个变量时,它使页面中断,我不知道为什么。

 $(function(){ 
     $("input:radio[name=f_1]").click(function() { 
      var type = $(this).val(); 
     }); 
     $("input:radio[name=f_1a]").click(function() { 
      var prod = $(this).val(); 
     }); 

     var JobType = type + prod; 
    }); 

你可以看到它住在这里:http://rdmproductions.com/dev/

,如果你采取的JobType变线,页面将作为它应该。我只是不明白发生了什么,以及如何解决它。

回答

1

变量类型和prod只在其相关函数的范围内有效。此外,onclick事件仅在点击控件时才会触发,这将在您的代码运行后的某个时间点。代码似乎在页面呈现时运行,因此用户无论如何都没有机会点击按钮。因此,您需要在用户有机会完成表单后的逻辑时间执行计算。明显的候选人将在页面提交中,或者通过另一个事件,比如用户点击一个按钮。你甚至都不需要使用从单选按钮的onclick事件,你只需要从收音机,如串联值...

function onSubmit() { 
    var type = $("input:radio[name=f_1]").val(); 
    var type = $("input:radio[name=f_1a]").val(); 
    var jobType = type + prod; 
    // do something with jobType 
} 

希望这有助于

+0

我对这一切都很满意,我该怎么做? – theFAILcoder 2012-04-20 22:06:34

+1

注:'JobType'会'NaN',因为'未定义+不确定= NaN' – 2012-04-20 22:07:34

+2

除本代码示例并没有真正完成任何事情,因为点击处理程序在未来,'VAR JobType =类型+ PROD运行一段时间;'在文件准备好时间运行。 – jfriend00 2012-04-20 22:07:40

2

你的变量typeprod是局部变量,因此它们在Click处理程序回调函数外部不可用。

如果你想让他们可用这些点击处理之外,那么你就需要在更高的层次范围申报或将它们存储在其他一些对象,它是持续性超出了你的点击处理函数的使用寿命。

也许你想要做的是当你需要它们时取得类型和产品的价值,而不是试图让他们在JobType

你可以根据获取的需求数据是这样的:

var JobType = $("input:radio[name=f_1]").val() + $("input:radio[name=f_1a]").val(); 

你甚至不需要在两个单选按钮的点击处理程序的。


编辑根据您最新的评论:

你可以听更改这两个单选按钮组,当二者都被选中,然后使用这样的代码做的总价值的东西:

$("input:radio[name=f_1], input:radio[name=f_1a]").change(function() { 
    var f1 = $("input:radio[name=f_1]:checked").val(); 
    var f1a = $("input:radio[name=f_1a]:checked").val(); 
    if (f1 && f1a) { 
     // both radio buttons have been selected, do something here 
     var jobType = f1 + f1a; 
     // do something with jobType here 
     alert(jobType); 
    } 
}); 

你可以看到它在这里工作:http://jsfiddle.net/jfriend00/FJcTA/

+0

- 这个建议的一点是,你把这个代码里面的任何功能需要jobtype,当你需要的特定值仅执行在一些其他功能里面。你不只是自己插入这些代码,因为这没有意义。只需在需要时获取工作类型 - 不要将其存储在变量中。 – theFAILcoder 2012-04-23 16:17:07

+0

@theFAILcoder更新的答案 – jfriend00 2012-04-23 16:33:27

+0

我希望,当两个变量选择的话,那就采取行动,我可以使其“监听”的选择,然后是使他们的一个变量组合,然后加载通过AJAX – theFAILcoder 2012-04-23 18:39:39

0

试试这个:

$(function() { 

    $("input:radio[name^=f_1]").click(function() { 

     var total = 0;   

     $("input:radio[name^=f_1]").each(function() { 
      total += parseInt($(this).val()); 
     }); 

    }); 

}); 
+0

应该total'复位'0点击处理程序中。 – nnnnnn 2012-04-20 22:20:28

+0

@nnnnnn,是的,你是对的,谢谢。 – undefined 2012-04-20 22:22:13

0
$(function() { 
    var type, prod, jobType; 
    $("input:radio[name=f_1]").click(function() { 
     type = $(this).val(); 
    }); 
    $("input:radio[name=f_1a]").click(function() { 
     prod = $(this).val(); 
    }); 
    jobType = type + prod; 
}); 
相关问题