2011-11-01 73 views
2

我有一組變量,用於判斷調查中的問題是否已被回答,並且它們最初設置爲false:q0=false; q1=false; qX=false;。然後在身體中,我有幾個input type="radio" s與.change(function(){ counter_radio(q#,INPUT'S_ID); });綁定到每個。這是功能counter_radio()的代碼:在JavaScript中的「參考」?

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返回true,但q#仍然是錯誤的。在php中,我會讓q參考q#,所以當q設置爲true時,q#也設置爲true。在javascript中有這樣的構造嗎?

回答

1

正如其他人所說,像布爾值這樣的簡單變量是通過值傳遞的,而不是通過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); 
+0

owww,好主意! – jacob

1

沒有本地語法,但您可以使用對象爲:

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(); 
} 
+0

oooow是的!除了現在'count'不增加:/ – jacob

3

你可以綁定的功能更改爲:

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

,並添加一個return q;您counter_radio函數的末尾。

+0

謝謝!它可以工作(但它不像簡單的函數調用那樣乾淨)。 – jacob

+1

如果你想'乾淨',那麼你真的應該重構整個事情,不要使用q1-q9作爲你的變量名稱:P – david

+0

這種功能方法是IMO遠比其他建議的全局對象引用更優雅。 – Svend

0

當用戶提交表單我將收集的值:

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

如果你想警告說,並非所有的問題都得到了解答用戶,使用jQuery validation plugin