2016-08-15 87 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() { ... 

但它似乎把整个DOM成一个可点击的元素(见Case 2 JSFiddle)。为什么...?

最后,Case 3 JSFiddle显示我想要的行为:如果用户点击与ID #2元素,有事,如果她点击该元素具有ID #3或其他地方,没有任何反应。当选择器作为变量传递时,我无法让它工作。


Case 1 JSFiddle给出了一个奇怪的错误。

Case 2 JSFiddle单击“a”或“b”,“a”将变成红色。

Case 3 JSFiddle是我所追求的。点击“a”,它变成红色,点击“b”没有任何反应。

+1

你输出''“#2”''作为一个字符串,这是无效的。此外,ID不应以数字开头。只需写:'.on(“click”,$ element,function(){...'因为'$ element'已经是一个字符串 – 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

ID可以以数字开头。https://www.w3.org/TR/html5/dom.html#the-id - 属性 – epascarello

+0

@epascarello我没有说什么不同:)我更新了答案,虽然 – Alex

+0

我笑与facepalm。显然只要把'$ element'放在那里就行了。我的真实代码中的ID以字母开头,我只是在示例中简化了它们。我想我应该像这里一样留下我的问题中的ID,这样答案会带来更多的信息。 –