나는 오류 코드자바 스크립트 DOM 오류
select.up().appendChild(sw);
의 줄에 다음과 같은 오류 메시지가 표시됨 "SCRIPT438 : 개체가 속성 또는 메서드 '최대'지원하지 않습니다"
이를 Internet Explorer에서만 발생합니다 ... Chrome, Safari 및 Firefox는 모두 코드를 잘 실행합니다. Google에서 "select.up()"을 (를) 검색하여 항목을 찾을 수 없습니다. 이 코드는 제 자신이 아니며 Javascript에서 DOM을 사용하는 데 익숙하지 않습니다.
<?php
$swatches = $this->get_option_swatches();
?>
<script type="text/javascript">
document.observe('dom:loaded', function() {
try {
var swatches = <?php echo Mage::helper('core')->jsonEncode($swatches); ?>;
function find_swatch(key, value) {
for (var i in swatches) {
if (swatches[i].key == key && swatches[i].value == value)
return swatches[i];
}
return null;
}
function has_swatch_key(key) {
for (var i in swatches) {
if (swatches[i].key == key)
return true;
}
return false;
}
function create_swatches(label, select) {
// create swatches div, and append below the <select>
var sw = new Element('div', {'class': 'swatches-container'});
select.up().appendChild(sw);
// store these element to use later for recreate swatches
select.swatchLabel = label;
select.swatchElement = sw;
// hide select
select.setStyle({position: 'absolute', top: '-9999px'})
$A(select.options).each(function(opt, i) {
if (opt.getAttribute('value')) {
var elm;
var key = trim(opt.innerHTML);
// remove price
if (opt.getAttribute('price')) key = trim(key.replace(/\+([^+]+)$/, ''));
var item = find_swatch(label, key);
if (item)
elm = new Element('img', {
src: '<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA); ?>swatches/'+item.img,
alt: opt.innerHTML,
title: opt.innerHTML,
'class': 'swatch-img'});
else {
console.debug(label, key, swatches);
elm = new Element('a', {'class': 'swatch-span'});
elm.update(opt.innerHTML);
}
elm.observe('click', function(event) {
select.selectedIndex = i;
fireEvent(select, 'change');
var cur = sw.down('.current');
if (cur) cur.removeClassName('current');
elm.addClassName('current');
});
sw.appendChild(elm);
}
});
}
function recreate_swatches_recursive(select) {
// remove the old swatches
if (select.swatchElement) {
select.up().removeChild(select.swatchElement);
select.swatchElement = null;
}
// create again
if (!select.disabled)
create_swatches(select.swatchLabel, select);
// recursively recreate swatches for the next select
if (select.nextSetting)
recreate_swatches_recursive(select.nextSetting);
}
function fireEvent(element,event){
if (document.createEventObject){
// dispatch for IE
var evt = document.createEventObject();
return element.fireEvent('on'+event,evt)
}
else{
// dispatch for firefox + others
var evt = document.createEvent("HTMLEvents");
evt.initEvent(event, true, true); // event type,bubbling,cancelable
return !element.dispatchEvent(evt);
}
}
function trim(str) {
return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}
$$('#product-options-wrapper dt').each(function(dt) {
// get custom option's label
var label = '';
$A(dt.down('label').childNodes).each(function(node) {
if (node.nodeType == 3) label += node.nodeValue;
});
label = trim(label);
var dd = dt.next();
var select = dd.down('select');
if (select && has_swatch_key(label)) {
create_swatches(label, select);
// if configurable products, recreate swatches of the next select when the current select change
if (select.hasClassName('super-attribute-select')) {
select.observe('change', function() {
recreate_swatches_recursive(select.nextSetting);
});
}
}
});
}
catch(e) {
alert("Color Swatches javascript error. Please report this error to [email protected] Error:" + e.message);
}
});
</script>
이 내게 줄 수있는 통찰력 사람을 감사합니다 : 여기
코드의 나머지 부분입니다!
['up()'메소드] (http://prototypejs.org/api/element/up)는 Prototype에서 온 것 같습니다. –
해당 코드는 라이브러리 (Prototype)를 사용하도록 작성된 것 같습니다. 그래? 그렇다면 꽤 의심스럽고 IE에서 "hasClassName()", "observe()"등의 문제를 일으킬 수있는 몇 가지 사항이 있습니다. 그러나 확실하게 알 수는 없습니다. – Pointy
@AndrewMarshall 아 좋아요. 기억이 안나요. 음, 함수의 시작 부분에'select = $ (select); '같은 것을 추가 할 수도 있습니다. 나는 프로토 타입으로 약간 녹슬었다. – Pointy