2012-02-14 1 views
0

Пытается найти ошибку при неправильной замене изображения. В исходном источнике img появляется изображение другого размера.Ошибка jqzoom: Узел не найден

К сожалению, на моем компьютере, независимо от браузера (Firefox, chrome, safari), ошибка является «тихой» и не вызывает проблемы.

Однако, отслеживая его с Firebug и хромированных инструментов, кажется, показывают, что это происходит из-за «Узел не найден» ошибка в Firefox (хром: «NOT_FOUND_ERR: DOM Exception 8»)

Это должно быть весь стандартный код из jigoshop, плагин WordPress. Это может быть потому, что тот, кто поставил изображения в первую очередь, не понял отношения размеров изображения.

В любом случае, это нарушение здесь:

document.body.removeChild(this.node); 

О 13 строк здесь (строка 653 в jquery.jqzoom-core.js)

this.fetchdata = function() { 
var image = $(this.node); 
var scale = {}; 
this.node.style.display = 'block'; 
$obj.w = image.width(); 
$obj.h = image.height(); 
$obj.pos = image.offset(); 
$obj.pos.l = image.offset().left; 
$obj.pos.t = image.offset().top; 
$obj.pos.r = $obj.w + $obj.pos.l; 
$obj.pos.b = $obj.h + $obj.pos.t; 
scale.x = ($obj.w/smallimage.w); 
scale.y = ($obj.h/smallimage.h); 
el.scale = scale; 
document.body.removeChild(this.node); 
$('.zoomWrapperImage', el).empty().append(this.node); 
//setting lens dimensions; 
lens.setdimensions(); 
}; 

узел не может find is:, который находится после загруженного html здесь:

<div class="zoomWrapperImage" style="width: 100%; height: 496px;"> 
<img style="position: absolute; border: 0px none; display: block; left: -5000px; top: 0px;" src="http://xyz.com/shop/wp-content/uploads/2011/10/go-291x496.jpg">consoleName="jQuery.data"consoleKind="Element"consoleFramework="jQueryUI-1"consoleId="73" 
</div> 

Я слишком много углубился в jquery. Итак, 2 вопроса:

  1. Как исправить эту точную проблему?
  2. Что такое общий процесс исправления этих ошибок?

ответ

3

Я нашел обходное решение. Однако я бы не назвал это правильным решением. Для устранения этой проблемы:

  1. Добавьте следующую вершину jquery.zqzoom.core.js (функция найдено из некоторых забытого источника):

    функция isInDocument (эл) { вара HTML = документ. body.parentNode; while (el) { if (el === html) { return true; } el = el.parentNode; } return false; }

  2. на линии 665, как раз перед:

    document.body.removeChild (this.node);

добавить следующее:

if(isInDocument(this.node)) 

Это остановит исключение из происходящего и позволить сценарий, чтобы продолжить.

+0

Пункт 1 является антилогичным на первый взгляд (и вторым также), но он работает. : D – Rolice

0

это не решило мою проблему. но заменяя

document.body.removeChild(this.node); 

с:

this.node.parentNode.removeChild(this.node); 

решить мою проблему, на самом деле не уверен, если это правильный способ сделать это.

0

Функция removeChild() требует ссылки на родительский элемент узла, который вы пытаетесь удалить. Document.body не является родительским узлом того, который вы пытаетесь удалить. Таким образом, вы должны получить родителя узла и использовать его в removeChild().

*parentnode*.removeChild(*node trying to remove*); 
+0

Спасибо за разъяснение. Тем не менее, главная причина заключается в том, почему тогда код jqzoom запускает этот код на несуществующем узле. Проблема больше связана с jqzoom, чем с JavaScript или jQuery. – Jahmic

 Смежные вопросы

  • Нет связанных вопросов^_^