【问题标题】:SCRIPT5007. IE7 can not read functions脚本5007。 IE7无法读取函数
【发布时间】:2014-04-01 14:34:33
【问题描述】:

我正在处理一个项目的一部分,该项目通过 on-change 事件更改地址。地址信息作为json数组传递。

很遗憾,我编写的代码不能在 IE7 上运行。我已经设法在大多数可用浏览器上实现了我的目标,但我不知道如何在 IE7 上解决这个问题。这是我的代码片段:

<script type="text/javascript">
var remote_self_json_branches_text = <?=$remote_self_json_branches?>;

function selfOfficeChangeText(element)
{
    console.log(remote_self_json_branches_text);
    $(".self_del").css('display', 'none');
    $("#self" + $(element).val()).css('display', 'block');
}

function change_delivery_office_selection_text (branch_id) {
    var cityMap = '';
    if(branch_id == 1){
        $('.textBlockContainer #self .headerImage').removeClass('remote-self').addClass('self');
    }

    if(branch_id == 2){
        $('.textBlockContainer #self .headerImage').addClass('remote-self').removeClass('self');
    }

    if(branch_id == 3){
        $('.textBlockContainer #self .headerImage').addClass('remote-self').removeClass('self');
    }

    $(".cityBranch").css('display', 'none');
    $("#city" + branch_id).css('display', 'block');

}

$(document).ready(function(){
    var mapUrl = '<?= $deliveryOffices[1]['mapCoordinates']?>';
    dom('delivery_office_title_text').innerHTML = remote_self_json_branches_text[1].v_title;
    dom('delivery_office_address_text').innerHTML = '<a class="mapPopup" href="' + mapUrl + '">' + remote_self_json_branches_text[1].v_address + '</a>';
    dom('delivery_office_work_time_text').innerHTML = remote_self_json_branches_text[1].v_work_time;

    var mapUrl = '<?= $deliveryOffices[2]['mapCoordinates']?>';
    dom('delivery_office_title1_text').innerHTML = remote_self_json_branches_text[2].v_title;
    dom('delivery_office_address1_text').innerHTML = '<a class="mapPopup" href="' + mapUrl + '">' + remote_self_json_branches_text[2].v_address + '</a>';
    dom('delivery_office_work_time1_text').innerHTML = remote_self_json_branches_text[2].v_work_time;

    var mapUrl = '<?= $deliveryOffices[3]['mapCoordinates']?>';
    dom('delivery_office_title2_text').innerHTML = remote_self_json_branches_text[3].v_title;
    dom('delivery_office_address2_text').innerHTML = '<a class="mapPopup" href="' + mapUrl + '">' + remote_self_json_branches_text[3].v_address + '</a>';
    dom('delivery_office_work_time2_text').innerHTML = remote_self_json_branches_text[3].v_work_time;
});
</script>

我在这里使用函数:

<div class="win-xp selCont">
    <select name="delivery_office" id="delivery_office_text" class="post_lt_branch" onchange="selfOfficeChangeText(this); change_delivery_office_selection_text(this.value);">
        <option value="0">-- <?=t('Pasirinkite')?> --</option>
        <?php foreach ($deliveryOffices as $key => $val) { ?>
            <option address="<?=$val['city']?>, <?=$val['address']?>" value="<?=$val['id']?>" title="<?=$val['city']?>, <?=$val['address']?>" <?php echo ($val['id'] == 1) ? 'selected' : ''; ?>><?=$val['name']?></option>
        <?php } ?>
    </select>
</div>

我收到此错误:

SCRIPT5007: The value of the property "selfOfficeChangeText" is null or undefined, not a Function object

我的猜测是浏览器没有足够的时间来加载 JavaScript。我对跨浏览器兼容性不是很熟练,因此将不胜感激。 提前致谢。

【问题讨论】:

  • 我认为问题在于 IE7 选择元素没有 value 属性。该错误消息非常令人困惑...."selfOfficeChangeText" 不是属性!
  • "selfOfficeChangeText" 是一个函数,我在 select onchange 属性中使用它。每个选项都有作为 id 的值,通过 php.ini 传递。 value="=$val['id']?>" 可能更难理解,因为我的代码不是那么整洁。但关键是,我错过了跨浏览器兼容性的一些细微差别。
  • 我不是这个意思。我要说的是,IE7 选择元素节点可能没有 value 属性。这并不意味着没有选择一个值,它只是意味着 IE7 的 dom 引擎不会将该值放在选择元素的 value 属性中。我只是在猜测这一点,因为我无法重新创建它。

标签: javascript jquery html internet-explorer internet-explorer-7


【解决方案1】:

我的猜测是,IE 7 认为该值为 null 或未定义,因为您使用的是不兼容的 jQuery 版本。尝试加载它的较低版本,例如 1.4 和/或更改选择器语法。

也许像$("#self" + $(element).val()).css('display', 'block'); 这样的jQuery 选择器在IE 7 的最新版本中存在问题,返回null 或undefined 是正常的。

【讨论】:

  • 对不起,我忘了说,我尝试在函数内部进行调试,但没有得到任何结果。所以这意味着浏览器无法加载这些功能。另外,js代码和html+php代码在同一个.phtml文件中。
【解决方案2】:

我会将其添加到您的 document.ready 函数中(并从您的选择中删除 onchange):

$("#delivery_office_text").change(function() { 
     selfOfficeChangeText(this); 
     change_delivery_office_selection_text($(this).val());
});

它在文档就绪时绑定更改事件。 我还让它使用$(this).val() 获取当前值,以防出现问题。

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 2014-07-09
    • 1970-01-01
    • 2022-08-19
    • 2021-07-20
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多