Передача содержимого this
Добрый день!
Есть примерно такая конструкция:
<a ... onclick='showForm(this); return false'>...
function showForm(now)
{
[...]
// У меня библиотек jQuery, смысл конструкции, вставляется html-код
$(now).before("... <a ... onclick='closeForm("+now+");'> ...");
}
function closeForm(obj)
{
// Закрывает.
$(obj).parent(".social-popup").remove();
}
Проблема в том, что в closeForm() приходит что-то не то, и функция не работает. Как нормально передать ссылку на первоначальный объект, вызвавший showForm. |
Tumman,
У вас в
before("... <a ... onclick='closeForm("+now+");'> ...");
now - объект (передан параметр this - ссылка на текущий объект). А вы хотите его отобразить в строке, получается
onclick='closeForm("Object object")'
Тогда уж делайте так:
$(now).before("... <a ... onclick='closeForm(this);'> ...");
Не занося и не вынося this из кавычек. |
Огромное спасибо, за подробный и ясный ответ!
|
Хотя, таким способом я не получаю в функции closeForm() доступ к этому объекту:
<a ... onclick='showForm(this); return false'>... а получаю к объекту вызывающему closeForm(). |
Tumman,
А, я сначала не понял к какому элементу вам нужен доступ. Вам нужно повесить обработчик на сслыку с closeForm через JavaScript, создав локальное замыкание, для того, чтоб из обработчика иметь доступ к переменной now. Для этого вам нужно получить доступ к элементу с closeForm, но поскольку он создается напрямую из JavaScript - с этим могут быть сложности. Для решения вашей задачи не хватит inline обработчиков прямо в html (onclick=""), вам нужно установить их из JavaScript. Должно получится что-то вроде такого:
<a ... onclick='showForm(this); return false'>...
function showForm(now)
{
[...]
// У меня библиотек jQuery, смысл конструкции, вставляется html-код
var piece = $("... <a ... class="closeLink" onclick='closeForm("+now+");'> ...");
$(".closeLink", piece).click(function() {
closeForm(now);
})
$(now).before(piece);
}
function closeForm(obj)
{
// Закрывает.
$(obj).parent(".social-popup").remove();
}
|
| Часовой пояс GMT +3, время: 17:30. |