我是从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。所有帮助将不胜感激
答案 0 :(得分:1)
IE不支持模板文字。您已经在$userType
(反引号)周围使用了模板文字。
通常,将字符串填充到onClick
属性中是一个坏主意。但是,如果需要,您需要:
确保在和
确保对HTML中具有特殊含义的字符进行编码(因为onClick
属性中的文本以及所有属性都是HTML文本)。
要这样做:
'...onChange="getStateCityZip(this.value, '.htmlspecialchars(json_encode($userType)).'...'
json_encode
处理确保输出有效的JavaScript字符串,并且htmlspecialchars
确保所有HTML特殊字符(如&
)都经过属性编码(如&
&
)。您的JavaScript函数看到的字符将被忠实地复制,因为HTML解析器会消耗编码的实体并发出原始字符,而JavaScript解析器会处理转义的字符。
答案 1 :(得分:0)
转义'
而不使用反引号:
$result = '<select
name="'.$name.'"
id="'.$name.'_new_id"'.$css_class.' '.$att.'
onChange="getStateCityZip(this.value, \''.$userType.'\');"> ';
// ^ here and here ^