2012-11-23 87 views
2

我有哪裏一些功能在點擊每行中的鏈接觸發一個表:使用Javascript/jQuery的。點擊()不觸發功能

代碼的相關部分是:

$('.my_table').inplacerowedit({ 
    url: myurl, 
    }); 

在inplacerowedit.js文件中,我有:

(function($) { 
    $.fn.inplacerowedit = function(options) { 
     var ops = $.extend({}, $.fn.inplacerowedit.defaults, options); 
     $(this).find(ops.editbuttonselector).on('click', function(e) { 
    ... } 

ops.editbuttonselector = 'a.edit' 

我的表格每行都有一個編輯鏈接,它通常工作正常。我的問題是新創建的行。

下面是我如何創建一行並將其添加到表:

new_row = null 

    getNewRow = function() { 
     if (new_row == null){ 
      new_row = $("<tr>"); 
      columns = {'name':'','type':'','value':'','edit':'','delete':''} 
      for (var column in columns) 
       new_row.append($("<td>").addClass(column).text(columns[column])); 
      links = ['edit','delete'] 
      for (var i=0;i<links.length;i++){ 
       link = links[i] 
       a = $("<a href='"+link+"' class='"+link+"'>").text(link); 
       new_row.find("."+link).append(a) 
      } 
     } 
     return new_row 
    }; 

    $("#addRowAndEdit").click(function(e){ 
     e.preventDefault(); 
      var row = getNewRow(); 
      $(".my_table").append(row); 
      new_record = $('.my_table tbody>tr:last'); 
      new_record.find('a.edit').click(); //this is the line that is not working. 
      .... 
    } 

UPDATE:

如果我做new_record.find('a.edit').on('click', alert('ok'));,警報funcion工作,但另一個不叫。

任何想法? 感謝

回答

0

我不得不作出2點的變化: 一個由納爾遜建議(出於某種原因,我第一次嘗試了他的建議,它打破了現有的鏈接)和另外一個是這樣的: new_record.find( 'a.edit')[0]。點擊()

我找到了答案,在https://stackoverflow.com/a/12110482/210481

3

使用event delegation因此新添加的行通過安裝在表中,而不是將其連接到每一個人a元素,對於一個處理程序處理,更換inplacerowedit.js以下行:

$(this).find(ops.editbuttonselector).on('click', function(e) { 

這一個:

$(this).on('click', ops.editbuttonselector, function(e) { 

EDITED

+0

請編輯您的答案,所以我可以投票了。 SO不允許我投票。我投了錯票。對不起 – duduklein

+0

我很高興我的回答可以幫助你解決問題。 – Nelson

0

如果你是全光照的1.6+摹最新的jQuery版本,那麼你應該試試這個:

new_record.find('a.edit').live('click',function(){ 
    // All your desired stuff here 
}); 

試一試,看看這對你的作品。

Just because you are dynamically creating the rows,對於這種情況.live()事件處理程序很有用。

,你可以在這裏找到更多的信息:http://api.jquery.com/live/

+0

您鏈接的頁面有這樣的內容:從jQuery 1.7開始,不推薦使用.live()方法。使用.on()附加事件處理程序。老版本的jQuery用戶應優先使用.delegate(),而不要使用.live()。 – AaronS

+0

是的,但它仍然有效! – Jai

+0

不工作的行不是定義發生點擊時發生的情況的行,而是模擬點擊本身的行。 – duduklein