Вызывать функцию для нескольких элементов
Добрый день!!
Не могу допереть,буду очень благодарен за совет,направление! Это небольшой код для простоты: две условных кнопки btn - каждая из них добавляет рядом с собой span-кнопку(cll), по которой в исходный btn добавляется текст "test" <br><span class="btn">btn1</span> <br><span class="btn">btn2</span> пишем плагин
$.fn.btn = function(){
var th = this; //ссылка на btn вызвавший ф-ю
th.click(function() {
console.log(this.tagName +' '+ this.id); //Id - пусто?
$('<span class="cll">123</span>').insertAfter(this);
$('.cll').live('click',function() {
th.append('test'); //текст который вставляется в th
});
});
};
$('.btn').hover(function() {
$(this).btn(); //вызов
});
так вот проблема в том что если вызвать метод $.fn.btn на обоих кнопках,то текст уже вставляется сразу в два btn, а должен только в один. Задача стоит-при наведении мышкой (или клике) вызвать "панель инструментов"(cll) и по клику на элемент панели вставить в поле(btn). подскажите как правильно навесить свой метод! |
krasovsky,
Вместо $('.cll') поставь th.next('.cll'). Ниже полный код:
$.fn.btn = function () {
var th = this; //ссылка на btn вызвавший ф-ю
th.click(function () {
$('<span class="cll" style="color: red;">123</span>').insertAfter(this);
th.next('.cll').click(function () { // элемент уже создан, можно и без live обойтись
th.append('test'); //текст который вставляется в th
});
});
};
$('.btn').hover(function () {
$(this).btn(); //!!! добавляет обработчик каждый раз
//т.е. если наведем 10 раз на кнопку, а потом клинем - то он вызовется 10 раз
});
|
Цитата:
Хотя проблему не совсем решило..дело в том что ('.cll') скорее всего будет один на странице, с display:none. Я переписал немного код:
$('<span class="cll" style="color: red;">123</span>').insertAfter('body');
//Допустим что он у нас уже добавлен в html где то с position:absolute
$.fn.btn = function () {
var th = this; //ссылка на btn вызвавший ф-ю
th.click(function () {
$('.cll').click(function () { // некст уже не помогает вот тут и основная проблема, как привязать ссылку th к cll? Как использовать поиск?
th.append('test');
});
});
};
$('.btn').one(function () {
$(this).btn(); //чтоб вызывался 1 раз.
});
Заранее спасибо! |
вообще то this надо было обернуть в $(this), не?
$('<span class="cll" style="color: red;">123</span>').insertAfter('body');
//Допустим что он у нас уже добавлен в html где то с position:absolute
$.fn.btn = function () {
var th = $(this); //ссылка на btn вызвавший ф-ю
th.click(function () {
$('.cll').click(function () { // некст уже не помогает вот тут и основная проблема, как привязать ссылку th к cll? Как использовать поиск?
th.append('test');
});
});
};
$('.btn').one(function () {
$(this).btn(); //чтоб вызывался 1 раз.
});
|
В строке 15 уже обернуто.
|
krasovsky,
Опиши полную картину того, что тебе нужно. Ибо начинается какое-то костыляние непонятно чего. |
Hoshinokoe,
Ну грубо говоря тут имитируется тулпанель, которая прописана в коде html.('.cll') При наведении на блок с классом ('.btn') она всплывает и нажимая на ней кнопки (в данный момент нажимая на нее саму) в этот .btn должен вставляться текст ('test'). А так как btn-ов несколько этот текс не должен вставляться в них во все, а только в тот на котором всплыла тулпанель |
| Часовой пояс GMT +3, время: 23:11. |