2012-07-03 4 views
0

У меня есть этот объект jQuery, который мне нужно, чтобы вставить в функцию, возможно ли это? См. Фрагмент кода:Как перенести объект jQuery в функцию?

var input; 
    jQuery('.upload').live('click', function() 
    { 
    input = jQuery(this).find(".image-path"); 
    tb_show(title, 'media-upload.php?type=image&TB_iframe=true'); 

    return false; 
    }); 

    window.send_to_editor = function(html) 
    { 
     if (input) 
     { 
       console.log(input); // works and defined at this point... 
       var data { 
       action: "doFunction" 
       }; 
       jQuery.post(ajaxurl, data, function(response) 
       { 
        console.log(input); // does not work, not defined...why?? 
        input.val(response); // this gives me input.val(response) is not a function 
       }); 
     } 
    } 
+0

Разместите HTML. – thecodeparadox

+0

Как правило, да, можно передавать и сохранять объекты jquery. Вероятно, у вас есть ошибка в коде. –

+0

Где определяется изображениеОбj? сделайте это var imageObj, и вы можете быть в порядке –

ответ

0

Major редактировать теперь, что OP раскрыл их фактический код:

Проблема заключается в том, что значение input не не установлен, пока через некоторое время, когда кнопка загрузки нажата, но вы пытаетесь использовать это значение до этого, таким образом, оно все еще неинициализировано. Вы должны изменить свой код, чтобы что-то вроде этого:

jQuery('.upload').live('click', function() 
{ 
    var input = jQuery(this).find(".image-path"); 
    if (input.length) { 
     var data { 
      action: "doFunction" 
     } 
     jQuery.post(ajaxurl, data, function(response) { 
      input.val(response); // this gives me input.val(response) is not a function 
     }); 
    } 
    return false; 
}); 

Я все еще не уверен, что ваш Jquery соответствует вашему HTML соответствующим образом, так как вы не раскрытым вашему HTML. Ваш текущий код ищет объект с class="image-path", который является дочерним элементом нажатой кнопки. Это немного необычная форма HTML, которая заставляет меня подозревать, что ваш jQuery не подходит для вашего HTML, что было бы еще одной проблемой для исправления.


Оригинальный ответ перед тем, как ОП раскрыл свой фактический код.

Все, что вам нужно сделать, это две вещи:

  1. Убедитесь, что imageObj определяется в надлежащем объеме, так что доступно в вашем обратного вызова ответа.
  2. Убедитесь, что объект jQuery разрешен для соответствующего типа объекта DOM, который имеет метод .val(). Поскольку обычно <input> объектов, которые работают с .val(), и объекты <input> обычно не являются объектами контейнера, я подозреваю, что это, по крайней мере, часть вашей проблемы.

Есть два способа, чтобы убедиться, что imageObj объявлен в надлежащем объеме:

  1. Объявляет глобально, так это доступно как глобальные переменные (не рекомендуется).
  2. Объявите его в родительском поле, чтобы он был доступен в функции обратного вызова. Вот пример объявления его в родительской области.

Как это:

function myFunc() { 

    var imageObj = jQuery(this).parents('.image-wrapper'); 

    var data = { 
    action: "doAjax" 
    }; 

    jQuery.post(ajaxURL, data, function(response) 
    { 
     imageObj.val(response); // this is undefined when run 
    }); 

} 

Чтобы убедиться, что imageObj решает соответствующий тип объекта DOM, вы можете добавить отладки кода сначала проверить, чтобы увидеть, если imageObj.length отлична от нуля, а затем вам нужно чтобы гарантировать, что родительский объект (ы) с class="image-wrapper" фактически являются <input> объектами, которые имеют рабочий метод .val(). Поскольку входные объекты обычно не являются объектами контейнера, это может быть частью вашей проблемы. Мы могли бы посоветовать более конкретно, если вы показали нам свой HTML.

Вот рабочий пример: http://jsfiddle.net/jfriend00/EJ8yu/

+0

Из того, что я знаю, это не сработает ... потому что imageObj входит в область myFunc, и вы используете его в пользовательской функции на обратный вызов. Я не показывал html becaus e это не имеет значения, это может быть любой тег .... Возможно, я поставил вопрос слишком сложным ... Я должен был просто спросить, как вставить объект jquery в другую функцию, когда он объявлен вне его. –

+0

@Rick - вы ошибаетесь. 'imageObj' будет доступен из родительской области внутри функции обратного вызова. Попробуйте - это работает. Причина, по которой я спросил вас о вашем HTML, состоит в том, что половина вещей, которые вы можете делать неправильно, относится к вашему HTML (как я объяснил в своем ответе). – jfriend00

+0

Вот пример, где он работает просто отлично: http://jsfiddle.net/jfriend00/EJ8yu/. Единственное, что не будет доступно внутри обратного вызова, это значение 'this' из родительской области. – jfriend00

0

Вероятно, вы не определяете imageObj в объекте окна. Полагаю, вы называете его определение в функциональном блоке.

Эта скрипка демонстрирует, что он работает: http://jsfiddle.net/dystroy/fDd7P/

var imageObj = jQuery(".image"); // pulls <img src="#" class="image" /> 

function custom() { 
console.log(imageObj.attr('src')); // and this would be undefined. 
} 

custom(); // logs '#', type F12 to see it 

Если вы пишете var imageObj = jQuery(".image"); в $(window).load(... блоке, обязательно удалите var с этого момента и объявить var imageObj; перед $(window).load(..., чтобы сделать это Глобальный.

Смежные вопросы