0

我有这个需要拉入函数的 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
              });
         }
    }
4

2 回答 2

0

您可能没有在 window 对象中定义 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(...它以使其成为全局。

于 2012-07-03T16:15:41.113 回答
0

由于 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,这将是另一个需要解决的问题。


OP 披露其实际代码之前的原始答案。

你所要做的就是两件事:

  1. 确保imageObj在正确的范围内定义它,以便在您的响应回调中可用。
  2. 确保 jQuery 对象解析为具有.val()方法的正确类型的 DOM 对象。由于通常<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/

于 2012-07-03T16:19:53.957 回答