2013-06-24 108 views
1

這是一個菜鳥問題。我搜索了無線電按鈕jQuery的東西,我感到困惑,因爲有很多動態單選按鈕等。無論如何,我正在嘗試做一個簡單的Show/Hide div thingie。jquery單選按鈕沒有返回正確的值

但由於某些原因,我的代碼總是返回與單選按鈕相同的值「3」,無論選擇什麼。

因此,這裏是我的html:

<script type="text/javascript" src="jquery-1.10.1.min.js"></script> 
<script src="testjq.js"></script> 
</head> 

<body> 
<div id="radios"> 


    <input type="radio" id="radio1" name="radBut" checked="checked" value="1"> 
    1 
    <br> 

    <input type="radio" id="radio2" name="radBut" value="2"> 
    2 
    <br> 

    <input type="radio" id="radio3" name="radBut" value="3"> 
    3<br> 

    <span id="VAL">value is = </span> 
    <br> 

</div> 
<div id="story1"> 
Story 1 
</div> 
<div id="story2" style="display:none"> 
Story 2 
</div> 
<div id="story3" style="display:none"> 
Story 3 
</div> 

,這裏是jQuery的/ Java是爲了在testjq.js

$(document).ready(function() { 
    var testVar = 1; 
     $('input:radio[name=radBut]:checked').val(); { 
      var testVar = $(this).val(); 
     } 
     if (testVar = 3){ 
      $("#story3").show(); 
      $("#story2").show(); 
      $("#story1").show(); 
      } 
     else if (testVar = 2){ 
      $("#story3").hide(); 
      $("#story2").show(); 
      $("#story1").show(); 
      } 
     else { 
      $("#story3").hide(); 
      $("#story2").hide(); 
      $("#story1").show(); 
     } 
     $('#VAL').append(testVar); 

}); 

任何建議,我得到了什麼錯?

+0

如果只有每個人都看到多麗絲的Crockford的視頻。他們會知道abt'===' – krishgopinath

回答

0

與其他人一起說的話,我做得更好。清潔至少。

首先我把你的代碼,你檢查testVar,並把它放在一個函數:

function testWithVar(testVar) { 
    //store all the story divs in a variable 
    var stories = $('[id^="story"]') 
    //hide all the variables and show the variables according to testVar 
    stories.hide().filter(':lt(' + testVar + ')').show(); 
    //append the value 
    $('#VAL').html("value is = " + testVar); 
} 

所以在ready,你會打電話這樣說:

$(document).ready(function() { 
    testWithVar(1); 
}); 

而且,如果你想改變testVar每當你選擇收音機組中的一個值時,做一個change事件將調用testWithVar函數ready

$(document).ready(function() { 
    testWithVar(1); 
    $('input:radio[name=radBut]').change(function() { 
     testWithVar(this.value); 
    }); 
}); 

演示:http://jsfiddle.net/CQDyz/

參考文獻:

+0

我正在嘗試瞭解您的代碼。現在它有點模糊,但你在代碼中的評論是非常有幫助的。 (主要是它的模糊原因,我的理解很低)這實際上有我正在尋找的功能。有一次,我將自己的頭圍繞在身上,這對我非常有幫助。我非常感謝你在這方面的幫助:) – SpikeyTheDesigner

+0

我在底部添加了一些參考資料,讓你更瞭解更多:-) – krishgopinath

+0

@SpikeyTheDesigner如果你認爲其中一個答案對你有幫助,請將它標記爲正確答案。 :) – krishgopinath

5

這一塊就在這裏:

$('input:radio[name=radBut]:checked').val(); { 
     var testVar = $(this).val(); 
} 

應該是:

testVar = $('input:radio[name=radBut]:checked').val(); 

沒有必要,因爲它已經宣佈重新聲明這個變量。

而且,所有的if條件只有一個=,他們需要兩個==

+0

非常感謝您的幫助。 = D – SpikeyTheDesigner

3
if (testVar = 3){ 

,說,從本質上講,「設置testVar3然後返回true」因爲=是賦值運算符。你要相等運算符==

if (testVar == 3){ 

同樣,看

else if (testVar = 2){ 

這需要==相同的變化。

而且,看看這個:

$('input:radio[name=radBut]:checked').val(); { 
    var testVar = $(this).val(); 
} 

這是有效的JS,但它不會做你的想法。它說:「獲取複選框的值,然後忽略它,然後將testVar設置爲valuedocument。」這不是你的意思。這樣做:

vat testVar = $('input[name=radBut]:checked').val(); 

注意,:radio選擇是不必要的,並且會降低顯著減緩選擇。

+0

您對我的理解所發生的事情的簡單語言解釋。我感謝您的幫助。 – SpikeyTheDesigner

0

testVar將始終等同於您的意思。爲了進行比較,您必須使用'=='標誌。使用'='表示您正在爲變量賦值。

您也可以使用更安全的'==='。