2016-08-15 2 views
1

동적으로로드 된 요소에 대해 on Click 기능을 만들어야합니다. 이 요소의 ID는 변수 $element에 있습니다. ID는 문자열로 저장됩니다. 나는이 같은 .on 이벤트 핸들러에 전달 :jQuery .on 이벤트가 변수 선택기와 작동하지 않습니다.

... .on("click", '"'+$element+'"', function() { ... 

그것은 작동 및 오류 Uncaught Error: Syntax error, unrecognized expression: "#2"을 (Case 1 JSFiddle 참조) 밖으로 제공하지 않습니다. #2은 요소의 ID입니다.

그때 나는이 같은 함수에서 포장 시도 :

... .on("click", function() {'"'+$element+'"'}, function() { ... 

을하지만 (Case 2 JSFiddle 참조) 클릭 할 수있는 요소로 전체 DOM을 설정하는 것 같다. 왜...? 사용자가 ID #2를 가진 요소를 클릭하면, 그녀는 ID #3와 요소를 클릭하거나 다른 곳, 아무 일도 발생하지 않으면 뭔가 일 :

마지막으로, Case 3 JSFiddle 내가 원하는 동작을 보여줍니다. 선택기가 변수로 전달 될 때 작동하지 않습니다.


Case 1 JSFiddle 이상한 오류가 발생합니다.

Case 2 JSFiddle "a"또는 "b"를 클릭하면 "a"가 빨간색으로 바뀝니다.

Case 3 JSFiddle 내가 뒤에 있습니다. "a"를 클릭하면 빨간색으로 바뀌고 "b"를 클릭하면 아무 일도 일어나지 않습니다. 당신의 바이올린에서

+1

' ' "# 2"''를 문자열로 출력합니다. 이것은 유효하지 않습니다. 또한 ID는 숫자로 시작하면 안됩니다. '$ element'는 이미 문자열이기 때문에 .on ("click", $ element, function() {...' – Alex

+0

https://jsfiddle.net/p4ursy9r/5/ – Alex

+0

@Alex https ://www.w3.org/TR/html5/dom.html#the-id-attribute – epascarello

답변

1

, have a look at this :

var $element = '#a2'; 

$("#a1").on(
     "click", 
     $element,  // <-- child Selector 
     function() { 
      $("#a1") 
      .find('span') 
      .filter(function() { 
       return $(this).text() === 'a'; 
      }) 
      .css('background-color', 'red'); 
     } 
    ); 

는 IDS , at least in 4 times 숫자로 시작되지 않도록 유의하시기 바랍니다.

+0

수는 숫자로 시작할 수 있습니다. https://www.w3.org/TR/html5/dom.html#the-id -attribute – epascarello

+0

@epascarello 나는 전혀 다른 말을하지 않았다 :) 나는 대답을 업데이트했다. – Alex

+0

나는 facepalm으로 웃고있다. 분명히'$ element'를 넣는 것만으로도 작동합니다. 실제 코드의 ID는 문자로 시작합니다. 예제에서이 ID를 단순화했습니다. 나는 대답이 추가 정보를 운반하므로 여기에있는 것처럼 내 질문에 ID를 남겨 두어야한다고 생각합니다. –

관련 문제