Передача объекта jQuery / javascript - PullRequest
3 голосов
/ 01 апреля 2009

До этого момента я мало что делал в javascript. Недавно я начал играть с jQuery и наткнулся на учебник о том, как Редактировать на месте в форме.

Полученный код отлично работает, если вы жестко закодировали идентификатор вашего контейнера div в функции, но у меня возникают проблемы при его обобщении для идентификатора, переданного функции.

Код начинается так:

$(document).ready(function() {
    setClickable($('#editInPlace'));
});

function setClickable(target)
{
    $(target).click
    (
        function()
        {
            //Do some dom manipulation

            $('.buttonA').click(function() { saveChanges(this, false); });
            $('.buttonB').click(function() { saveChanges(this, true); });
        }
    )

    .mouseover(function() { $(this).addClass("editable"); })
    .mouseout(function() { $(this).removeClass("editable"); });
}; //end of function setClickable

function saveChanges(obj, cancel)
{
    //Handle the save changes code

    //Reset the div
    $(obj).parent().after('<div id="editInPlace">' + t + '</div>').remove();

    //Call setClickable
    setClickable($('#editInPlace'));
}

У меня возникли проблемы с последним вызовом setClickable внутри функции saveChanges. Если я жестко закодирую значение $('#editInPlace'), оно работает нормально. Однако, если я изменю сигнатуру функции на

function saveChanges(target, obj, cancel)

и передать целевой объект из метода setClickable:

$('.buttonB').click(function() { saveChanges(target, this, true); });

звонит

setClickable(target);

, похоже, не работает, и я не могу понять, почему.

Ответы [ 2 ]

6 голосов
/ 01 апреля 2009

Изменение:

function setClickable(target)
{
    $(target).click
    (

до:

function setClickable(target)
{
    target.click
    (

Вы передаете упакованный набор (также называемый объектом jQuery), а затем оборачиваете его в другой упакованный набор. Вышеуказанное исправляет это. Альтернативный способ сделать это:

$(document).ready(function() {
    setClickable('editInPlace');
});

function setClickable(id)
{
    $("#" + id).click
    (

Вы видите, к чему я клоню?

1 голос
/ 01 апреля 2009

Вы всегда можете попробовать использовать setClickable ($ (target)); чтобы убедиться, что у вас есть объект jQuery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...