Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么Dojo1.9/JS代码不能在InternetExplorer7中工作?_Javascript_Html_Internet Explorer_Dojo - Fatal编程技术网

Javascript 为什么Dojo1.9/JS代码不能在InternetExplorer7中工作?

Javascript 为什么Dojo1.9/JS代码不能在InternetExplorer7中工作?,javascript,html,internet-explorer,dojo,Javascript,Html,Internet Explorer,Dojo,使用Dojo 1.9的web应用程序出现问题。该应用程序在Chrome、Firefox和IE10/11上运行良好,但我们收到了IE7出现问题的报告 不幸的是,我无法直接测试这一点,因为根据公司指令,IE7已从所有开发人员机器上删除。所以我负责修复一个无法复制的bug 由于用户反馈,应用程序中的所有按钮都从type=submit更改为type=button,并在按钮中添加了onclick处理程序,以便仅在单击按钮时提交表单,而不是在按下ENTER时提交表单。这是dojo/domReady!连接按钮

使用Dojo 1.9的web应用程序出现问题。该应用程序在Chrome、Firefox和IE10/11上运行良好,但我们收到了IE7出现问题的报告

不幸的是,我无法直接测试这一点,因为根据公司指令,IE7已从所有开发人员机器上删除。所以我负责修复一个无法复制的bug

由于用户反馈,应用程序中的所有按钮都从type=submit更改为type=button,并在按钮中添加了onclick处理程序,以便仅在单击按钮时提交表单,而不是在按下ENTER时提交表单。这是dojo/domReady!连接按钮的代码:

    //  Make the buttons submit the form ONLY on click (avoid keypress)
    query("button[type='button']").on("click", function(e) {
        console.log("    in button onclick handler");
        //  This actually submits the form based on the button that was clicked
        myapp.core.buttonClick("applicationInfo",this);
        console.log("    leaving button onclick handler");
    })
下面是实际提交表单myapp.core.button的例程单击:

    myapp.core.buttonClick = function(formName, buttonObject) {
        // Have to do this to transmit the data - the button info
        // won't be transmitted otherwise
        var formObject = document.forms[formName];
        var newField = document.createElement('input');
        newField.type = 'hidden';
        newField.name = buttonObject.name;
        newField.value = buttonObject.value;
        formObject.appendChild(newField);
        formObject.submit();
    }

熟悉IE7的人能发现这段代码中的问题吗?提前感谢…

简短回答:IE7和SpringWebFlow不兼容

长答覆:

不仅如此,IE7也是如此。由于IE7将所有按钮提交给服务器,因此无论单击哪个按钮,使用IE7将Web流事件传递回服务器都是一件麻烦事,并且需要一个非常难看的破解:

var formObject = document.forms[formName];
//  Rip out the buttons because IE7 sucks
for (i=0;i<formObject.length;i++) {
    if (formObject[i].tagName === 'BUTTON') {
        formObject[i].parentNode.removeChild(formObject[i]);
        i--;
    }
}
var newField = document.createElement('input');
newField.type = 'hidden';
newField.id=buttonObject.id;
newField.name = buttonObject.name;
if (buttonObject.attributes['value'] != null) {
    newField.value = buttonObject.attributes['value'].value;
} else {
    newField.value = buttonObject.value;
}
formObject.appendChild(newField);
formObject.submit();

这种黑客基本上从表单中撕下所有按钮对象,然后将实际单击的一个按钮添加回隐藏字段,然后提交表单

您是否尝试过BrowserStack之类的服务?是的,我已经在BrowserStack中尝试过,并验证过它失败了,但是BrowserStack上可用的工具不足以让我确定它失败的地方。这是一个第22条军规-我可以在Browserstack上看到它发生,但不能调试它,我可以在本地调试它,但不能使错误发生。听起来很奇怪,但是在登台环境中更改控制台。日志和警报,这样你就不会推送它了?手动旧式调试,嗯?值得一试……根据发行说明,Dojo 1.9x不支持IE7[2美分。可能是Dojo.on模块在IE7上不起作用的问题,您可以试试旧的Dojo.connect模块,看看它是否起作用。