2

我很欣赏这可能不是一个好问题,但我束手无策(如果问题需要删除,请告诉我)

我在 Magento (Zetaprints Web To Print) 中安装了一个插件,这个插件的图像上传部分不起作用。我已经联系了他们的支持,但他们不想知道这件事,除非我掏钱。

我认为这是由于引发了 JavaScript 错误,在 Firefox 和 Chrome 控制台中我都会收到错误消息:

铬合金

未捕获的类型错误:对象没有“更改”方法

火狐

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 回答