2013-04-16 4 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 

может кто-то пожалуйста объяснить такое поведение и как я могу использовать $ (это), как вы бы, если бы элемент существовал, когда дом загружен?

Благодаря

+2

'live()' устарел, вы должны использовать 'on' вместо этого. – Eli

+0

Спасибо, позвольте мне это сделать – Harry

ответ

5

=> изменения this к this в родительском контексте:

$(".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 тыс. ничего не говорит о live() – bugwheels94

+0

Вы предлагаете делегата? – Harry

Смежные вопросы