加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Internet Explorer中的JavaScript DOM错误

发布时间:2020-12-13 16:23:30 所属栏目:PHP教程 来源:网络整理
导读:我在这行代码上收到以下错误 select.up().appendChild(sw); 错误“SCRIPT438:对象不支持属性或方法’向上’” 这只发生在Internet Explorer中… Chrome,Safari和Firefox都运行良好的代码.我无法通过Google搜索“select.up()”找到任何内容.这段代码不是我自
我在这行代码上收到以下错误

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(/^ss*/,'').replace(/ss*$/,'');
            }


            $$('#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 support@ikova.com. Error:" + e.message);
        }
    });
</script>

欣赏任何人都可以给我的洞察力!

解决方法

我很确定up()是一个PrototypeJS方法,所以我很确定你需要它才能工作.

http://prototypejs.org/api/element/up

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读