奇怪的jQuery错误.children(...)。attr(...)。更改不是函数?

时间:2013-01-10 13:44:57

标签: javascript jquery magento

我很欣赏这可能不是一个很好的问题,但我会在我的智慧结束(如果问题需要删除,请告诉我)

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

我认为这是由于JavaScript错误被抛出,在Firefox和Chrome控制台中我收到错误消息:

  

未捕获TypeError:对象没有方法'更改'

火狐

  

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行)

上面的代码可以看到任何明显错误吗?或者有人知道可能导致这种情况的原因吗?

2 个答案:

答案 0 :(得分:2)

如果guid未定义$td.attr('value')将返回字符串而不是jquery链。所以'string'.change会引发错误。

  $td
    .children('.zetaprints-field')
    .attr('value', guid)
    .change({ zp: zp }, image_field_select_handler);

答案 1 :(得分:1)

jQuery $与magento不完全兼容。我认为它与Prototype.js有关,但我从来没有考虑过“思考”。我只知道执行以下操作可以解决您的问题...

任何jQuery插件都必须启用jQuery()。noConflict()。

请参阅:http://api.jquery.com/jQuery.noConflict/

基本上你必须通过你的插件并在任何地方替换“$(”with“jQuery(”