2017-08-13 107 views
-1

我想要什麼:jQuery的addClass不是一個函數

我想打一個形式,我給出一個對接觸式(用戶可以選擇從下拉接觸式)不同的輸入字段。我試着用jQuery,但我有兩個錯誤。

如何我想:

function showContact() { 
/* */ 
    $('#userType').change(function(){ 
     var value = $(this).val(); 

     console.log(value); 
     var member = document.getElementById("private"); 
     var corporation = document.getElementById("corporation"); 

     if (value == 1) { 
      member.removeClass('hidden'); 
      corporation.removeClass('hidden').addClass('hidden'); 

      return; 
     } else if (value == 2) { 
      member.removeClass('hidden').addClass('hidden'); 
      corporation.removeClass('hidden'); 

      return; 
     } else { 
      member.removeClass('hidden').addClass('hidden'); 
      corporation.removeClass('hidden').addClass('hidden'); 

      return; 
     } 
    }); 
} 

有什麼錯誤:

1:腳本只在開始第二個下拉變化。我想從第一次改變開始。

2:當我改變我得到這個錯誤:

TypeError: member.removeClass is not a function

什麼問題?

+0

因爲我沒有完整的代碼只是會做出猜測:不是'VAR成員=的document.getElementById(「私人」);'請嘗試var member = $(「#private」);' – ihpar

+1

您的'member'和'corporation' vars是* not * jQuery vars,'addClass'和'removeClass'函數在jQuery中定義。 –

回答

2

假設一切正常。變化:

var member = document.getElementById("private"); 

var member = $("#private"); 
+0

謝謝,那工作:) – Feralheart

0

您所遇到的問題是,你有定期javasript混合jQuery的,這是唯一的,如果你使用jQuery,你可以像你這樣的物體上使用removeClass正在努力去做。

另一個事情是,它無法找到:

var member = document.getElementById("private"); 

它沒有找到換句話說,「私有」成員還沒有生成。

這與#符號有關,它使它成爲一個id。 A .是一個類,而#是一個id。

如果私人是一個id,你這樣做:

var member = document.getElementById("#private"); 
3

1: The script only starts on the second dropdown change. I want to start at the first change.

這將取決於showContact是如何調用。不知道這些信息很難說清楚。請注意,它只能被調用一次,可能在DOM加載時,因爲它綁定了一個事件處理程序。

2: When I change I got this error:

TypeError: member.removeClass is not a function 

member,DOM節點,不具有removeClass方法。爲了解決這個問題,你可以做一個兩個:

  • member.classList.remove("hidden")(使用本機API)
  • $(member).removeClass("hidden")(創建一個jQuery對象,並使用jQuery的API)

此外,每次呼叫都會先移除hidden類,然後再將其添加回來。這似乎最終沒有效果。

// What has been gained here? 
$(member).removeClass('hidden').addClass('hidden'); 

如果您希望確保該類不會在元素上重複,則不必擔心。本地API和jQuery都會阻止這種情況發生。

3

因爲corporation是一個DOM元素,而不是一個jQuery節點,並且您正試圖在其上使用jQuery函數。它包裝在一個jQuery選擇像$(corporation)

jsFiddle example