繁体   English   中英

Javascript代码可在IE11中运行,但不能在Chrome中运行

[英]Javascript code working in IE11 but not in Chrome

我们在这里遇到了IE11 / Chrome的奇怪问题。 我们有以下代码:

divFrmPost = document.getElementById('divFormPost'); 
divFrmPost.innerHTML = '<form name="formPost" method="post" \ action="http://someurl/servlet/myapp"> \    
    <input type="hidden" id="cd_user" name="cd_user" value="John Doe"> \    
    <input type="hidden" id="cod_user" name="cod_user" value="5013"> \    
    <input type="hidden" id="login" name="login" value="jdoe"> \    
    <input type="hidden" id="pwd" name="pwd" value="123456"> \    
    <input type="hidden" id="profile" name="profile" value="12"> \   
    <input type="hidden" id="" name="" value="128"> \
</form>'; 
frmPost = document.getElementById('formPost');
frmPost.submit(); 

当我们在IE11中运行它时,窗体可以正常处理,但是当我们在Chrome(v44)中运行它时,它什么也不做,并且在控制台中出现以下错误:

Uncaught TypeError: Cannot read property 'submit' of null

我们知道问题必须是没有ID /名称的最后一个隐藏字段,但是为什么它不能在IE11中工作而不能在Chrome中工作呢?

编辑 :在原始代码中,innerHTML构造仅一行,我对其进行了编辑以更好地阅读,但是我忘了加反斜杠。

EDIT2 :拜托,让我们避免评论战...

让它起作用

首先,我们必须编辑代码以使其运行:正如其他人所说,您正在寻找id,但是在表单上仅设置了名称,Chrome和其他真正的浏览器不喜欢它。

 divFrmPost = document.getElementById('divFormPost'); divFrmPost.innerHTML = '<form id="formPost" method="post" action="http://someurl/servlet/myapp">' + '<input type="hidden" id="cd_user" name="cd_user" value="John Doe">' + '<input type="hidden" id="cod_user" name="cod_user" value="5013">' + '<input type="hidden" id="login" name="login" value="jdoe">' + '<input type="hidden" id="pwd" name="pwd" value="123456">' + '<input type="hidden" id="profile" name="profile" value="12">' + '<input type="hidden" id="" name="" value="128">' +'</form>'; frmPost = document.getElementById('formPost'); frmPost.submit(); 
 <div id="divFormPost"></div> 

多行字符串

要在多行上连接字符串,请使用+

为什么可以在IE上使用?

这里的答案

getElementById方法<IE 8

返回具有指定ID或NAME属性值的第一个对象的引用。

MSDN Microsoft的getElementById方法

也许正因为如此 ,如果您未定义<!DOCTYPE> ,它就可以在IE 11上为您工作IE启用Quirks模式

Quirks模式通过支持Internet Explorer早期版本中的行为,强调了对标准遵从性的兼容性。

更改

name="formPost"

id="formPost"

或使用

getElementsByName();

您的代码将是

 divFrmPost = document.getElementById('divFormPost'); 
divFrmPost.innerHTML = '<form id="formPost" method="post" action="http://someurl/servlet/myapp">    
    <input type="hidden" id="cd_user" name="cd_user" value="John Doe">    
    <input type="hidden" id="cod_user" name="cod_user" value="5013">    
    <input type="hidden" id="login" name="login" value="jdoe">    
    <input type="hidden" id="pwd" name="pwd" value="123456">    
    <input type="hidden" id="profile" name="profile" value="12">    
    <input type="hidden" id="" name="" value="128">
</form>'; 
frmPost = document.getElementById('formPost');
frmPost.submit(); 

两个问题:

  1. 您不能通过常规字符串符号将字符串拆分为多行。 我将其更改为Template String 您可以在行末添加+ ,以实现IE兼容性。

  2. 您的表单没有ID。 所以我加了。 <form id="formPost" name="formPost" ...

这是工作代码:

        divFrmPost = document.getElementById('divFormPost'); 
        divFrmPost.innerHTML = `<form id="formPost" name="formPost" method="post" action="http://someurl/servlet/myapp">;    
            <input type="hidden" id="cd_user" name="cd_user" value="John Doe">    
            <input type="hidden" id="cod_user" name="cod_user" value="5013">    
            <input type="hidden" id="login" name="login" value="jdoe">    
            <input type="hidden" id="pwd" name="pwd" value="123456">    
            <input type="hidden" id="profile" name="profile" value="12">    
            <input type="hidden" id="" name="" value="128">
        </form>`; 
        frmPost = document.getElementById('formPost');
        frmPost.submit(); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM