1

我正在开发一个项目的一部分,它改变了地址变化的事件。地址信息以json数组的形式传递。SCRIPT5007。 IE7无法读取功能

不幸的是我的书面代码在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。我不熟悉跨浏览器兼容性,所以任何帮助,将不胜感激。 在此先感谢。

+0

我认为问题在于IE7 select元素没有value属性。该错误消息非常混乱....''selfOfficeChangeText“'不是一个属性! –

+0

“selfOfficeChangeText”是一个函数,用于选择onchange属性。每个选项的值都是用php传递的id。 value =“<?= $ val ['id']?>”可能很难理解,因为我的代码不够整齐。但重点是,我错过了跨浏览器兼容性的一些细微差别。 –

+0

这不是我的意思。我在说的也许是IE7选择元素节点没有值属性。这并不意味着没有选择一个值,它只是意味着IE7的dom引擎不会将值放在select元素的value属性中。我只是猜测这一点,但因为我不能重新创建它。 –

回答

0

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

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

+0

我很抱歉,但我忘了提及,我试图在函数内部调试,但我没有得到任何结果。所以这意味着浏览器无法加载这些功能。另外,js代码与html + php代码在同一个.phtml文件中。 –

0

我会添加到您的document.ready功能(并删除您选择的onchange):

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

它结合在文件准备变更事件。 我也使它得到当前值使用$(this).val()万一是给你的问题。