2011-01-16 2 views
4

Как я могу объединить следующее с делегатом в jQuery?Добавить Jeditable в делегат в jQuery

У меня есть #commentContainer, окружающий все редактируемые элементы, и я динамически добавляю редактируемые поля (Jeditable). способность редактирования не работает для динамически загружаемых элементов.

 /* Bind Jeditable instances to "edit" event. */ 
    $(".edit").editable('/Comment/PostComment/', { 
     type: 'textarea', 
     cancel: 'Cancel', 
     submit: 'OK', 
     indicator: '<img src="img/indicator.gif">', 
     tooltip: 'Click to edit...', 
     event: "edit" 
    }); 
    /* Find and trigger "edit" event on correct Jeditable instance. */ 
    $(".edit_trigger").bind("click", function() { 
     $(this).prev().trigger("edit"); 
    }); 

ответ

2

Событие делегирования не работает для запуска кода, когда элемент добавлен в DOM. Некоторое событие браузера должно сначала состояться, как щелчок.

Итак, если вы добавляете новые элементы, которые должны иметь плагин editable, они должны быть вызваны вручную, когда вы их добавляете.

$('<textarea>').editable(/* settings */) 
       .appendTo('#commentContainer'); 
+0

Я нашел, который работал слишком: http://forum.jquery.com/topic/loading-content-with-delegate – raklos

+0

@raklos: Да, но вы повторно выбрать все элементы из DOM и повторное применение плагина к тем, которые уже имеют его. Плагин может быть оборудован, чтобы справиться с этим, но лучше было бы сосредоточить вызовы '.editable()' только на тех элементах, которые этого требуют. – user113716

2

Есть решение добавить jQuery.editable для динамически добавленных полей.

$("body").on("click",".editable",function(e){ 

    // Add editable plugin 
    // but! for `focus` instead common `clik` event 

    $(this).editable('go.to', 
    { 
     event : 'focus.editable', 
     .. 
     .. 

    // Then trigger focus event 

    }).trigger("focus"); 
}) 
+1

Это работает, но если вы нажмете несколько раз, редактируемые снова добавляются, и это испортится ... Я проверил для '$ (this) .data ('editable.options')' и только вызвал фокус, иначе bind редактируемый – Martin