"reference" in javascript?

"reference" in javascript?

本文关键字:quot javascript reference in      更新时间:2023-09-26

我有一组变量,用来判断调查中的某个问题是否得到了回答,它们最初被设置为false: q0=false; q1=false; qX=false;。然后在体内,我有几个input type="radio"每个都连着.change(function(){ counter_radio(q#,INPUT'S_ID); });。这是函数counter_radio()的代码:

function counter_radio(q,id){
    if (q===false) {
        q=true;
        count++;
        $("#counter").css("width", count);
        $("#percent").text(count + "%");
    }
    $("span#"+id).append(", "+q);
    $("span#"+id).fadeIn();
}

我期望计数器只增加一次(第一次从集合中选择一个无线电)。但是,每当input type=radio发生变化时,计数器就会增加。我的问题是,q返回真,但q#仍然是假的。在php中,我会使q成为q#的引用,因此当q设置为true时,q#也设置为true。javascript中有这样的结构吗?

您可以将绑定函数更改为:

.change(function(){ q# = counter_radio(q#,INPUT'S_ID); });

并将return q;添加到counter_radio函数的末尾。

正如其他人所说,像布尔值这样的简单变量在Javascript中是按值传递的,而不是按引用传递的,所以没有办法改变这一点。

如果你有这样的多个变量:

var q0=false, q1=false, qX=false;

那么,将它们放在数组中可能更容易:

var qArray = [false, false, false];

然后,因为数组和对象以一种你可以修改原始数据的方式传递,你可以像这样传递数组和一个索引给你的函数,然后你就可以修改你的函数的原始数据:

function counter_radio(q, index, id){
    if (q[index] === false) {
        q[index] = true;
        count++;
        $("#counter").css("width", count);
        $("#percent").text(count + "%");
    }
    $("span#"+id).append(", " + q[index]);
    $("span#"+id).fadeIn();
}
counter_radio(qArray, 2, id);

没有原生语法,但你可以使用对象来实现:

function counter_radio(q_,id){
    if (q_.ref===false) {
        q_.ref=true;
        count++;
        $("#counter").css("width", count);
        $("#percent").text(count + "%");
    }
    $("span#"+id).append(", "+q);
    $("span#"+id).fadeIn();
}

我将收集用户提交表单时的值:

jQuery('radio[name=...]:checked').val()

如果你想警告用户不是所有的问题都被回答了,使用jQuery验证插件