2012-09-18 39 views
1

我有以下的HTML結構,這是一個handlebars.js模板:jquery.on()不工作

<div class="row" id="{{serviceId}}"> 
      <div class="favorites" isfavorite="{{isFavorite}}"> 
       <img src="{{favImg}}" style="width:25px;"> 
      </div> 
      <!-- end .favorites --> 
      <div class="service"> 
       <p class="title">{{serviceName}}</p> 
      </div> 
      <div class="small serviceStat"> 

      </div> 
      <div class="small metric"> 

      </div> 
      <div class="performance"></div> 
      <div class="icon email"> 
       <img src="../images/email.png" style="width:27px"> 
      </div> 
     </div> 

當我嘗試使用.on()方法它不綁定事件到電子郵件類工作:

$('.row').on('click','.email',function(){alert('clicked')}); 

//or like this: 
$('.email').on('click',function(){alert('clicked')}); 

但是,如果我用活它結合它的工作原理:

$('.email').live('click',function(){alert('clicked')}); 

任何想法什麼可能導致它?

+0

我把你的代碼原樣**沒有任何修改**,它的工作原理:http: //jsfiddle.net/zerkms/y4Khy/ – zerkms

+1

你使用的是什麼版本的jQuery? – j08691

+1

你使用的是什麼版本的jQuery?如果您使用的是jQuery 1.6及以下版本,那麼這可能是爲什麼 –

回答

2

的問題是,你需要您的代理處理程序綁定以上的DOM [您的.row元素會存在所在地] ...

如果您有:

<div id="item-container"> 
    <!--divs with class row go in here --> 
</div> 

你需要要做到這一點:

$('#item-container').on('click', '.email', function() {alert('clicked'); }); 

這樣做的原因是實例模板的不要在DOM文檔時存在準備好了...所以你需要綁定事件到一個元素,確實存在...又名,item-container

+0

謝謝,我知道在新的jQuery版本中,實時事件最終被翻譯爲'.on',所以我認爲它的工作原理是相同的,一旦元素被創建就會自動綁定,這是我的錯誤。 – Tomer

+0

很高興你能解決問題。乾杯 – BLSully

1

此代碼

$('.row').on('click','.email',function(){alert('clicked')}); 

//or like this: 
$('.email').on('click',function(){alert('clicked')}) 

有待在此:

$(document).ready(function(){ 
    /* Code goes here */ 
}); 

我猜測它不是。 (這是爲了確保事件在DOM準備好後被綁定)。

要麼,要麼你使用的是舊版本的jQuery。 .on已添加到其中一個更新版本中。