2012-04-20 60 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; 
}); 
相關問題