2

これは素晴らしい質問ではないかもしれませんが、私は機知に富んでいます(質問を削除する必要がある場合はお知らせください)

Magento (Zetaprints Web To Print) にプラグインをインストールしましたが、このプラグインの画像アップロード部分が機能しません。私は彼らのサポートに連絡しましたが、私がお金を出さない限り、彼らはそれについて知りたがりません.

Firefox コンソールと Chrome コンソールの両方で、JavaScript エラーがスローされたためだと思います。エラー メッセージが表示されます。

クロム

キャッチされていない TypeError: オブジェクトにメソッド 'change' がありません

ファイアフォックス

TypeError: $td.children(...).attr(...).change は関数ではありません

私は決して jQuery や JavaScript の専門家ではありませんが、参照されているオブジェクトが jQuery オブジェクトではなく、別のものであるためだと思われます (よくわかりません)。エラーが参照しているコードは次のとおりです。

  function add_image_to_gallery (guid, url, on_image_load) {
    var trs = $('.tabs-wrapper > .user-images > table > tbody > tr');

    $(trs).each(function () {
      var $tr = $(this);
      var $template = $tr.children('.zp-html-template');

      var $td = $template
                  .clone()
                  .removeClass('zp-html-template')
                  .insertAfter($template);

      // THE CODE BELOW IS THROWING THE ERRORS
      $td
        .children('.zetaprints-field')
        .attr('value', guid)
        .change({ zp: zp }, image_field_select_handler);

      $td
        .children('.image-edit-thumb')
        .click(thumbnail_edit_click_handler);

      var $thumb = $td.children('.image-edit-thumb');

      $thumb
        .find('> .buttons-row > .zp-delete-button')
        .click(delete_image_click_handle);

      var $img = $thumb
                   .children('img')
                   .attr('alt', guid)
                   .attr('src', url);

      if (on_image_load)
        $img.load(on_image_load);
    });
  }

(コードの小さなスニペットです。ファイルの長さは 1400 行を超えています)

上記のコードで明らかに間違っていることを誰かが見ることができますか? または、何がこれを引き起こしているのか、誰にもわかりませんか?

4

2 に答える 2

2

guidが未定義の場合$td.attr('value')、jqueryチェーンの代わりに文字列を返します。したがって、'string'.changeはエラーを発生させます。

  $td
    .children('.zetaprints-field')
    .attr('value', guid)
    .change({ zp: zp }, image_field_select_handler);
于 2013-01-10T13:52:06.017 に答える
1

jQuery $ は、magento と完全には互換性がありません。Prototype.js と関係があると思いますが、「そう思う」以外に調べたことはありません。次のことを行うと問題が解決することを知っています...

jQuery プラグインでは、jQuery().noConflict() を有効にする必要があります。

参照: http://api.jquery.com/jQuery.noConflict/

基本的に、プラグインを調べて、「$(」がある場所を「jQuery(」に置き換える必要があります。

于 2013-01-10T13:49:36.097 に答える