如何将jQuery对象引入函数?

时间:2012-07-03 16:02:40

标签: 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
              });
         }
    }

2 个答案:

答案 0 :(得分: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(...使它成为全球性的。

答案 1 :(得分: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;
}); 

由于您尚未公开HTML,我仍然不确定您的jQuery是否与您的HTML匹配。您当前的代码正在查找class="image-path"的对象,该对象是单击按钮的子级。这是一种有点不寻常的HTML形式,这使我怀疑你的jQuery不适合你的HTML,这将是另一个需要解决的问题。


OP之前的原始答案披露了他们的实际代码。

你所要做的就是两件事:

  1. 确保imageObj在适当的范围内定义,以便在回复回调中提供。
  2. 确保jQuery对象解析为具有.val()方法的正确类型的DOM对象。由于通常<input>对象具有.val()方法,而<input>对象通常不是容器对象,我怀疑这至少是您问题的一部分。
  3. 有两种方法可以确保在适当的范围内声明imageObj

    1. 全局声明它,因此它可用作全局变量(通常不推荐)。
    2. 在父作用域中声明它,以便它在回调函数中可用。以下是在父作用域中声明它的示例。
    3. 像这样:

      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/