2013-04-08 165 views
-3

我有以下代碼(轉載於this jsFiddle),這是行不通的。 「類型」選擇框中有三個選項。如果選擇第一個(真/假),我需要顯示第一個div,如果選擇第二個或第三個選項,則需要顯示第二個div。這段代碼有什麼問題?jQuery .on not firing

HTML:

<form name="editform"> 
    Selector: <select class="selectors" name="1-type" id="1-type"> 
     <option value="tf" selected="selected">True/False</option> 
     <option value="rd">Radio Button</option> 
     <option value="chk">Checkboxes</option> 
    </select> 

    <div id="seldiv-1"> 
     Good Value: <select name="1-good_value" id="1-good_value"> 
         <option value="true">True</option> 
         <option value="false">False</option> 
        </select> 
    </div> 

    <div id="textdiv-1" style="display:none;" disabled="disabled"> 
     Good Value: 
     <textarea name="1-good_value" id="1-good_value"></textarea> 
    </div> 
</form> 

的Javascript:

$(document).ready(function(){ 
    $('.selectors').on('change',function(){ 
     var arr = $(this).name.split("-"); 
     var id = arr[0]; 
     var val = $(this).val(); 
     if(val=="tf") { 
      $('#textdiv-'+id).hide(); 
      $('#seldiv'+id).show(); 
      //Make textarea disabled 
      //Make selection enabled 
     } else { 
      $('#textdiv-'+id).hide(); 
      $('#seldiv'+id).show(); 
      //Disable selection 
      //Enable textarea 
     } 
    }); 
}); 
+0

用打開的控制檯運行您的代碼,您將看到錯誤消息。 – 2013-04-08 17:58:06

+0

錯誤未出現在我的網站上;我甚至沒有想過在jsFiddle上嘗試它。謝謝! – vaindil 2013-04-08 18:01:50

回答

2

這條線是你的問題:

var arr = $(this).name.split("-"); 

on工作正常,但上面的行引發異常。

var arr = $(this).attr("name").split("-"); 

有幾種方法可以解決這個問題,上面是一個例子。

4

Uncaught TypeError: Cannot call method 'split' of undefined.

變化$(this).name.split("-");this.name.split("-");

3

它100%沒有觸發,你有一個錯誤,$(this).name未定義。我認爲你實際上想要做的是this.name

jQuery對象不像DOMElement對象一樣行爲,即它們不具有相同的屬性(如.name)。下一次,當試圖找出某些東西不起作用的時候,打開你的Web控制檯,你會發現你的大部分問題。

+0

我打開了控制檯,但錯誤未出現在我的網站上。我並沒有想過在jsFiddle中嘗試控制檯,但它出現在那裏。謝謝! – vaindil 2013-04-08 18:03:43

4

它不是on但拆分函數給你錯誤,你正在嘗試獲取jquery對象的名稱方法,這是不可用...要麼使用attr()從jquery對象獲取名稱。 。或者使用this DOM對象來獲取名稱

試試這個

var arr = $(this).attr('name').split("-"); 

var arr=this.name.split('_'); 

注意兩者的代碼,如果裏面/ else條件是相同的..這樣你就不會在你的提琴注意到difference..check出來

working fiddle example

+0

這仍然不起作用。他使用了一個未定義的變量'tf'。 'if(val == tf)' – David 2013-04-08 18:02:20

+1

@David'tf'是一個帶引號的字符串,而不是一個變量.. – Chad 2013-04-08 18:08:34

+0

不在小提琴上,這是我檢查的地方 – David 2013-04-08 18:09:56

1

您的問題試圖訪問$(this)時,這是未定義。

儘量只this代替

this.name.split("-"); 
1

name是不是有效的屬性。而是使用id或將其訪問方式更改爲var arr = $(this).attr('name').split("-");