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(...varvar 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;
}); 

HTML を開示していないため、jQuery が HTML と適切に一致するかどうかはまだわかりません。現在のコードはclass="image-path"、クリックされたボタンの子であるオブジェクトを探しています。これは少し変わった形式の HTML であり、あなたの jQuery があなたの HTML に適していないのではないかと疑っています。


OPが実際のコードを開示する前の元の回答。

あなたがしなければならないのは、次の2つのことだけです。

  1. が適切なスコープで定義されていることを確認してimageObj、応答コールバックで使用できるようにします。
  2. jQuery オブジェクトが、メソッドを持つ適切なタイプの DOM オブジェクトに解決されることを確認してください.val()。通常、機能するメソッドを<input>持つオブジェクトであり、オブジェクトは通常コンテナー オブジェクトではないため、これは少なくとも問題の一部であると思われます。.val()<input>

imageObjが適切なスコープで宣言されていることを確認するには、次の 2 つの方法があります。

  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 に答える