2012-11-27 22 views
0

我在<頭「有此腳本:不能使用運行JavaScript的HTML單選按鈕

<script> 
var rad = document.getElementsByName('search_type'); 
alert(rad[1]); 
var prev = null; 
for (var i = 0; i < rad.length; i++) { 
    rad[i].onclick = function() { 
     (prev)? console.log(prev.value):null; 
     if(this !== prev) { 
      prev = this; 
     } 
     console.log(this.value) 
     alert(this.value); 
    }; 
} 
</script> 

,這是我的表單:

<form name="search_form" action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 
    <table border="0"> 
     <tr> 
      <td class="input"> 
       <input type="radio" name="search_type" value="search_code" checked>1st type<br> 
       <input type="radio" name="search_type" value="search_title">2nd type<br> 
       <input type="radio" name="search_type" value="search_filter">3rd type<br> 
      </td> 
     <tr/> 
    </table> 
</form> 

但沒有警報的工作。我在控制檯中沒有錯誤。請幫忙。

回答

4

您正在解析單選按鈕的HTML代碼之前正在運行腳本。

將表格下面的腳本,或運行在加載事件代碼:

window.onload = function() { 

    var rad = document.getElementsByName('search_type'); 
    alert(rad[1]); 
    var prev = null; 
    for (var i = 0; i < rad.length; i++) { 
    rad[i].onclick = function() { 
     (prev)? console.log(prev.value):null; 
     if(this !== prev) { 
     prev = this; 
     } 
     console.log(this.value) 
     alert(this.value); 
    }; 
    } 

}; 
+0

+1但最後一行不應該有')'。 – MrCode

+0

謝謝!我把它放在窗體下面,它工作正常。現在請帶我到一些有據可查的StackOverflow頁面,其中人們要求通過這個單選按鈕值來控制第二個表單元素的能力 - 殘疾。 –

+0

@MrCode:是的,你說得對,我糾正了。太習慣於編寫jQuery'ready'處理程序...:/ – Guffa

2

你可以用一些jQuery的簡化代碼:

$(document).ready(function() { 
    var rad = $('[name="search_type"]'); 
    console.log(rad); 
    var prev = null; 
    rad.click(function() { 
     console.log(prev, $(this).is(':checked')); 
     if (this !== prev) { 
      prev = this; 
     } 
     console.log(prev, $(this).is(':checked')); 
    }); 
}); 

http://jsfiddle.net/f2aDK/

+0

謝謝。這纔是重點。但是這和prev有相同的值。如何捕捉真正的prev值? –

0

第一個加法jquery lib

$(document).ready(function() { 
      $('[name="search_type"]').live('click', function (event) { 
        var rad = document.getElementsByName('search_type'); 
         alert(rad[1]); 
         var prev = null; 
         for (var i = 0; i < rad.length; i++) { 
          rad[i].onclick = function() { 
           (prev)? console.log(prev.value):null; 
           if(this !== prev) { 
           prev = this; 
           } 
           console.log(this.value) 
           alert(this.value); 
          }; 
         } 
    }); 
    }); 
2

在表單之後移動它的腳本。 在瀏覽器解析DOM元素之前,JavaScript無法讀取DOM。

<form name="search_form" action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 
    <table border="0"> 
     <tr> 
      <td class="input"> 
       <input type="radio" name="search_type" value="search_code" checked>1st type<br> 
       <input type="radio" name="search_type" value="search_title">2nd type<br> 
       <input type="radio" name="search_type" value="search_filter">3rd type<br> 
      </td> 
     <tr/> 
    </table> 
</form> 

<script> 
var rad = document.getElementsByName('search_type'); 
alert(rad[1]); 
var prev = null; 
for (var i = 0; i < rad.length; i++) { 
    rad[i].onclick = function() { 
     (prev)? console.log(prev.value):null; 
     if(this !== prev) { 
      prev = this; 
     } 
     console.log(this.value) 
     alert(this.value); 
    }; 
} 
</script> 
+0

謝謝。這纔是重點。但是這和prev有相同的值。如何捕捉真正的prev值? –