变量破坏了我的代码

时间:2012-04-20 22:01:36

标签: jquery

我正在为我开发的网站构建自定义计算器。我是一名新开发人员,这有点过头但我正在努力学习。

我试图获取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变量的行,页面将按预期运行。我只是不明白发生了什么以及如何解决它。

4 个答案:

答案 0 :(得分:2)

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

如果您希望它们在这些单击处理程序之外可用,那么您需要在更高级别的范围内声明它们,或者将它们存储在超出单击处理程序函数生命周期的其他对象中。

您可能想要做的是在需要时获取type和prod的值,而不是尝试将它们保存在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/

答案 1 :(得分:1)

变量type和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
}

希望这有帮助

答案 2 :(得分:0)

试试这个:

$(function() {

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

      var total = 0;           

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

   });

});

答案 3 :(得分: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;
});