2017-01-28 2 views
0

사용자가 다른 아코디언 요소에 물건을 입력 할 때까지 아코디언 요소가 비활성화되어야합니다. 나는 HTML을위한이 설정을 가지고있다 :html 클래스를 제거해도 jQuery removeClass를 사용하여 제거 된 클래스 기능이 분리되지 않습니다.

 ... 
     <ul> 
      <li><a id="subject_link" href="#subject"> Paciente </a></li> 
      <li><a id="general_link" href="#general" class="disabled">Información General</a></li> 
     </ul> 
     ... 

다른 요소들이 많지만 이것으로 충분하다고 생각한다.

일반 링크에는 사용자가 HTML의 일부로 먼저 이동하지 못하도록하는 "사용 안 함"이 있습니다. 이것은 현재 다음과 같이 수행되고 있습니다 :

$(".disabled").click(function(){ 
$("#subject_link").click()// Scroll screen to target element 
alert("You need to enter subject ID first"); 
}); 

위의 코드는 사용자에게 ID를 입력하도록 알려주고 해당 아코디언 요소에 반환합니다. (마크 업 "클래스 = 비활성화"더 이상 나타나지 않습니다 그와 스타일 모두 제안)을 상기 성공적으로 클래스를 제거

if($("#tab0").valid()){ 
    $.post(url , values); 
    // alert("Data Loaded: " + str); 
    $("#general_link").removeClass("disabled"); 
    $("#general_link").click(); 

하지만 클릭 : 사용자가 주제 ID를 입력 할 때 다음, I 클래스 제거를 트리거 now not-disabled 요소는 여전히 ".disabled"(사용자에게 누락 된 ID를 알리고 해당 요소로 이동 함)에 대한 기능을 트리거합니다.

내가 무엇을 놓치고 있습니까 ???

$("#general_link.disabled").off("click"); 
$("#general_link").removeClass("disabled"); 
+0

'.disabled'는 CSS 참조 일뿐입니다 그 요소를 제거하면 해당 요소에 대한'click' 이벤트가 제거되지 않는다는 것을 의미하지는 않습니다. 아래는 적절한 방법입니다 – Roljhon

답변

1

또는 이벤트 대상 요소가 선택에 대해 다시 다시 확인됩니다 발생 그래서 때 이벤트 위임을 사용 :

+0

이것은 완벽하게 작동했습니다. :) ... 좋은 팁. –

+1

당신을 진심으로 환영합니다! ** 이벤트 위임 **에 대해 자세히 알아보십시오. –

1

당신은 그 기능을 분리 .off()method을 사용해야합니다. 그래서 그 대신이 사용

$(document).on("click", ".disabled", function(){ 
    $("#subject_link").click()// Scroll screen to target element 
    alert("You need to enter subject ID first"); 
}); 

는 참고 : 여기 document.disabled 요소의 부모 중 하나가 될 수 있습니다. 그 부모님과 가장 가까운 것은 더 빠른 ckeck이 될 것입니다. (HTML의 나머지 부분에 대해서는 잘 모릅니다. 따라서 위의 코드에서 document 대신에 선택기를 넣을 수있는 DIV 안에 UL이있는 경우