2013-04-16 89 views
2

时动态添加元素的DOM是这样的:

row = """ 
    <div class="ipad-row"> 
     <h3>Sample Row</h3> 
     <div id="wrapper-placeholder"> 

      <div class="scrollView" style=""> 
       <a class="btn btn-primary add-row-item">Add an item</a> 
      </div> 
     </div> 
    </div> 
""" 


$(".add-row").live "click", -> 
    $(".ipad .body").append row 
    false 

为什么当我尝试从该行的元素里面的链接得到这个,我得到的窗口:

$(".add-row-item").live "click", => 
    f = $ this 
    console.log f // this logs window object, not the link element? 
    f.parent().append row_item 

是否有人可以解释这种行为,以及如何我可以使用$(这)就像你如果DOM加载时确实存在的元素?

感谢

+2

'live()'已弃用,您应该使用'on'来代替。 – Eli

+0

谢谢,让我这么做 – Harry

回答

5

=>父环境的变化thisthis

$(".add-row-item").live "click", => 
    f = $(this) 

编译成

var _this = this; 
$(".add-row-item").live("click", function() { 
    var f = $(_this); 

使用->代替,这将不会修改this

+0

该死的,这很简单!谢谢 – Harry

+5

78.3 k的声望家伙并没有对live() – bugwheels94

+0

提出任何建议,这是非常不寻常的。你建议委托吗? – Harry