2014-08-14 4 views
0

Мне нужно динамически создать элемент html <ul> с определенным классом, скажем class_c, используя вызов ajax.Функция привязки в Runtime для динамически созданного элемента html

class_c используется третьей стороной файл, расслоение плотной, который не может быть ни изменен, ни называется вручную, так как это является анонимным (как $('.class_c').click(function(e){})), поэтому я не могу связать с помощью JQuery .bind().

Есть ли способ перестроить привязку для всех элементов с помощью class_c, чтобы новый элемент мог ответить на эту анонимную функцию?

+0

Вы имеете в виду вы хотите, чтобы огонь * их * обработчик для новых элементов вы добавляете они они не зацепили событие на? –

+0

Я попробовал то, что вы предложили ... не работал. Можете ли вы сказать, может ли я удалить другие классы, прикрепленные к клонированному элементу (не class_c), и он все равно будет иметь зависимость? Потому что их действие определяет для других классов элемент, используемый для создания клона. –

+0

Невозможно сказать без лишних слов дополнительную информацию. То, что вы пытаетесь сделать, если я понимаю вас, *** очень необычно ***, что обычно означает, что вы должны рассмотреть совершенно другой подход. –

ответ

0

Если вы используете on() вместо click(), вы можете привязать дескриптор щелчка ко всем дочерним элементам вашего селектора, даже если эти элементы будут созданы в будущем. Конечно, вы тогда нужен контейнер для тех «которые будут созданы элементы», то есть уже в йот, или обработчик еще не будет работать ...

$('.myContainer').on("click", ".class_c", function(e){}); 
+0

Это позволит им подключить * свой собственный обработчик, но мой вопрос заключается в том, что они хотят запустить обработчик * другого кода. –

+0

hmmm ... это право. моя вина... – errand

0

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

Метод jQuery's clone принимает аргумент, который сообщает ему, чтобы клонировать события и данные, а также только узел. Таким образом, при добавлении нового элемента, вы можете сделать это:

var clone = $(".class_c").first().clone(true); 
clone.html(/*...your content here...*/); 
clone.appendTo(/*...some appropriate target...*/); 

Live Example

<!DOCTYPE html> 
<html> 
<head> 
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script> 
    <meta charset="utf-8"> 
    <title>Example</title> 
</head> 
<body> 
    <ul class="class_c"> 
    <li>Original - click me!</li> 
    </ul> 
<script> 
    (function() { 
    "use strict"; 

    // "Other" code hooks click on .class_c elements by *cloning* one of 
    // the ones that already has the click event hooked, using the `true` 
    // argument that tells jQuery to clone event handlers and data 
    $(".class_c").click(function() { 
     display("Handler triggered for '" + $(this).text() + "'"); 
    }); 

    // Your code adds a new .class_c element 
    var clone = $(".class_c").first().clone(true); 
    clone.html("<li>Clone - click me!</li>"); 
    clone.appendTo(document.body); 

    function display(msg) { 
     var p = document.createElement('p'); 
     p.innerHTML = String(msg); 
     document.body.appendChild(p); 
    } 
    })(); 
</script> 
</body> 
</html> 
Смежные вопросы