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, что было бы еще одной проблемой для исправления.
Оригинальный ответ перед тем, как ОП раскрыл свой фактический код.
Все, что вам нужно сделать, это две вещи:
- Убедитесь, что
imageObj
определяется в надлежащем объеме, так что доступно в вашем обратного вызова ответа.
- Убедитесь, что объект jQuery разрешен для соответствующего типа объекта DOM, который имеет метод
.val()
. Поскольку обычно <input>
объектов, которые работают с .val()
, и объекты <input>
обычно не являются объектами контейнера, я подозреваю, что это, по крайней мере, часть вашей проблемы.
Есть два способа, чтобы убедиться, что imageObj
объявлен в надлежащем объеме:
- Объявляет глобально, так это доступно как глобальные переменные (не рекомендуется).
- Объявите его в родительском поле, чтобы он был доступен в функции обратного вызова. Вот пример объявления его в родительской области.
Как это:
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/
Разместите HTML. – thecodeparadox
Как правило, да, можно передавать и сохранять объекты jquery. Вероятно, у вас есть ошибка в коде. –
Где определяется изображениеОбj? сделайте это var imageObj, и вы можете быть в порядке –