2009-09-05 21 views
0

我一直在我的頭撓了一個小時...我有一個待辦事項列表完成每個項目上的按鈕。每次用戶點擊它時,都應該對服務器執行一次Ajax調用,調用標記函數然後更新整個列表。附加活動與原型

我面臨的問題是,新列表有完成按鈕以及每個項目上。並且它在第一次更新後不再附加點擊事件。

如何將新更新的元素的事件處理程序附加到原型?

注:我已經通過了evalScripts:真正到了更新包裝

初始事件處理程序附加

<script type="text/javascript"> 
document.observe('dom:loaded', function() { 

    $$('.todo-done a').each(function(a) { 
    $(a).observe('click', function(e) { 
    var todoId = $(this).readAttribute('href').substr(1); 
    new Ajax.Updater('todo-list', $.utils.getPath('/todos/ajax_mark/done'), { 
    onComplete: function() { 
     $.utils.updateList({evalScripts: true}); 
    } 
    }); 
    }); 
    }) 
}); 
</script> 

updateList:

<script type="text/javascript"> 
var Utils = Class.create({ 
    updateList: function(options) { 
    if(typeof options == 'undefined') { 
    options = {}; 
    } 

    new Ajax.Updater('todo-list', $.utils.getPath('/todos/ajax_get'), $H(options).merge({ 
     onComplete: function() { 
     $first = $('todo-list').down(); 
     $first.hide(); 
     Effect.Appear($first, {duration: 0.7}); 
     new Effect.Pulsate($('todo-list').down(), {pulses: 1, duration: 0.4, queue: 'end'}); 
    } 
    }) 
    );  
    } 
}) 

$.utils = new Utils('globals'); 
</script> 

任何幫助非常感謝,謝謝:)

+0

對不起有關可怕的縮進,不能做太多關於它=/ – 2009-09-05 02:45:49

回答

1

您可以在github上
有些文檔使用行爲低親在http://www.danwebb.net/2006/9/3/low-pro-unobtrusive-scripting-for-prototype

所以代碼會看起來像:

Event.addBehavior({ 
    '.todo-done a:click' : function(e) { 
    var todoId = $(this).readAttribute('href').substr(1); 
    new Ajax.Updater('todo-list', $.utils.getPath('/todos/ajax_mark/done'), { 
     onComplete: function() { 
     $.utils.updateList({evalScripts: true}); 
     } 
    }); 
    }); 
}); 
0

它可能是值得嘗試最初取消註冊您的點擊韓dlers這樣的:

$$('.todo-done a').each(function(a) { 
    $(a).stopObserving('click); 
}); 

無論哪種方式,您將需要您的onComplete中添加新的事件處理程序,但這應該僅是必要的新的DOM元素。

記得總是螢火蟲和執行console.log()是你的朋友:)

+0

嗯好吧,我會嘗試重新啓用事件。有沒有像jQuery在原型中的livequery? – 2009-09-05 16:01:56