2013-04-14 2 views
2

У меня есть html-компонент, который будет перезагружен после нажатия кнопки. Некоторые элементы компонента привязаны к кликам и зависанию. Все работает нормально, пока функция .load() не вызвана, чтобы перезагрузить компонент. Элементы загруженного компонента не привязаны к соответствующим обработчикам.jQuery, как переупорядочить html-элементы после .load()

В этот момент я помещаю js-script в конец компонента, так что он связывает элементы. Но после того, как компоненты переустановят, элементы, находящиеся вне компонента, теперь несвязаны.

Я пробовал с .on(), .live(), .bind(), .click() ... ничего не получалось.

+1

'$ (document) .on ('#selector')'. Если это не сработает, вам нужно показать код, который у вас есть. – JJJ

+1

показать попытки, которые вы сделали вместе с образцом html .. явно не используя методы делегирования должным образом – charlietfl

ответ

2

Вы должны иметь возможность вызвать метод .load() И создать обратный вызов, в котором вы можете восстановить элементы.

Например:

$(document).ready(function() { 
    ...initially bind all event handlers for page (including elements to be reloaded)... 

    $("#someButton").on("click", function() { 
     $("#elementToReload").load("page-to-load.html", function() { 
      ...bind all event handlers for this and containing elements here... 
     }); 
    }); 
}); 


Позвольте мне знать, если у вас есть какие-либо вопросы по этому поводу. Удачи! :)

+0

может, конечно, сделать это таким образом, но для простых обработчиков событий OP концепция делегирования будет безупречно работать, если выполняется с правильным синтаксисом – charlietfl

+0

@charlietfl - да, это очень верно - вот почему я включил бит об использовании '.on' в моем исходном решении. Я думаю, что вы правы в том, что использование методов делегирования должно быть подчеркнуто на основе OP, поэтому я добавил пример для '.on'. –

+0

фактически ваш метод загрузки не будет работать, большинство элементов не запускают событие загрузки. Метод загрузки AJAX имеет полный обратный вызов, где вы должны выполнить привязку. Кроме того, ваш синтаксис 'on' не будет работать, селектор должен быть постоянным активом, а затем использовать аргумент' target selector'. '$ (selector) .load (url, function() {/ * код привязки здесь * /})' – charlietfl

1

я не уверен, как вы являются обязательными для вашего события, но в основном, если вы делаете что-то в этом случае:

$('.your-class').on('click', function (e) {[...]}); 

Вы, возможно, лучше передать его в документ, который не перезагружается.

$(document).on('click', '.your-class', function (e) {[...]}); 

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