Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Передача содержимого this (https://javascript.ru/forum/misc/1714-peredacha-soderzhimogo.html)

Tumman 06.09.2008 10:16

Передача содержимого 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.

Андрей Параничев 06.09.2008 15:03

Tumman,
У вас в
before("... <a ... onclick='closeForm("+now+");'> ...");

now - объект (передан параметр this - ссылка на текущий объект). А вы хотите его отобразить в строке, получается
onclick='closeForm("Object object")'


Тогда уж делайте так:
$(now).before("... <a ... onclick='closeForm(this);'> ...");

Не занося и не вынося this из кавычек.

Tumman 08.09.2008 10:48

Огромное спасибо, за подробный и ясный ответ!

Tumman 08.09.2008 12:19

Хотя, таким способом я не получаю в функции closeForm() доступ к этому объекту:
<a ... onclick='showForm(this); return false'>...

а получаю к объекту вызывающему closeForm().

Андрей Параничев 08.09.2008 15:43

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, время: 10:40.