带有参数的javascript函数不适用于IE

时间:2018-06-20 10:47:08

标签: javascript php jquery

我是从php函数内部调用函数 getStateCityZip

$result = '<select name="'.$name.'" id="'.$name.'_new_id"'.$css_class.' '.$att.' onChange="getStateCityZip(this.value,`'.$userType.'`);"> ';

并且javascript函数是

function getStateCityZip(customer_id,userType){
    var userType= String(userType);
    alert(customer_id + userType);
    $.post( "start_quote.php", { "action":"get_state_city_zip", 
    "customer_id" : customer_id})
    .done(function( data ) {
    var obj = jQuery.parseJSON ( data );
    if (userType=='shipper'){
    $('#s_country').val(obj.billAddress.bill_country);
    $('#s_state').val(obj.billAddress.bill_state);
    $('#s_city').val(obj.billAddress.bill_city);
    $('#s_zip').val(obj.billAddress.bill_zip);
    }
}

这在chrome上工作正常,但在IE上甚至不发出警报。如果要从函数定义中以及从调用函数的位置删除参数并在函数定义中对值进行硬编码,则它可以正常工作。在所有其他情况下,我都尝试过不适用于IE。所有帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

IE不支持模板文字。您已经在$userType(反引号)周围使用了模板文字。

通常,将字符串填充到onClick属性中是一个坏主意。但是,如果需要,您需要:

  1. 确保在

  2. 中转义JavaScript字符串文字中所有具有特殊含义的字符。
  3. 确保对HTML中具有特殊含义的字符进行编码(因为onClick属性中的文本以及所有属性都是HTML文本)。

要这样做:

'...onChange="getStateCityZip(this.value, '.htmlspecialchars(json_encode($userType)).'...'

json_encode处理确保输出有效的JavaScript字符串,并且htmlspecialchars确保所有HTML特殊字符(如&)都经过属性编码(如&amp; &)。您的JavaScript函数看到的字符将被忠实地复制,因为HTML解析器会消耗编码的实体并发出原始字符,而JavaScript解析器会处理转义的字符。

答案 1 :(得分:0)

转义'而不使用反引号:

$result = '<select 
    name="'.$name.'" 
    id="'.$name.'_new_id"'.$css_class.' '.$att.' 
    onChange="getStateCityZip(this.value, \''.$userType.'\');"> ';
                                       // ^ here and here ^
相关问题