0x80004005(NS_ERROR_FAILURE)[nsIDOMHTMLFormElement.submit]

时间:2011-04-16 12:11:29

标签: javascript dom

我创建了一个方法来检索一些数据(lat,lon points)并打开一个窗口来映射它们。

function openMapWindow (data) {
    alert(data);

    var mapForm = document.createElement("form");
    mapForm.target = "Map";
    mapForm.method = "POST"; // or "post" if appropriate
    mapForm.action = "/map.php";

    var mapInput = document.createElement("input");
    mapInput.type = "text";
    mapInput.name = "addrs";
    mapInput.value = data;
    mapForm.appendChild(mapInput);

    document.body.appendChild(mapForm);

    window.open("", "Map", "status=0,title=0,height=600,width=800");

    mapForm.submit();

}

数据变量填充以下内容:

map coorindates

然而,我得到以下区域:

mapInput.value = data;
  

错误:未捕获的异常:   [例外......“组件返回   失败代码:0x80004005   (NS_ERROR_FAILURE)   [nsIDOMHTMLFormElement.submit]”   nsresult:“0x80004005   (NS_ERROR_FAILURE)“位置:”JS   frame :: http://www.xxx.xxx ::   openMapWindow :: line 244“data:no]

     

第0行

1 个答案:

答案 0 :(得分:6)

它与浏览器的弹出窗口拦截器有关。如果仔细查看错误,它会将提交“按钮”描述为问题,而不是mapValue.input行。

以下代码对我有用:

http://jsfiddle.net/WDFNL/

function openMapWindow (data) {
    alert(data);

    var mapForm = document.createElement("form");
    mapForm.target = "Map";
    mapForm.method = "POST"; // or "post" if appropriate
    mapForm.action = "/map.php";

    var mapInput = document.createElement("input");
    mapInput.type = "text";
    mapInput.name = "addrs";
    mapInput.value = data;
    mapForm.appendChild(mapInput);

    document.body.appendChild(mapForm);

    window.open("", "Map", "status=0,title=0,height=600,width=800");

    mapForm.submit();
}
openMapWindow('-35.308401,149.124298-35.307841,149.124298');

我确实得到了你最初描述的错误,但它与我的弹出窗口阻止程序有关。一旦我授权jsfiddle.net被允许弹出窗口,它就开始工作了。

修改

有一种简单的方法可以对此进行测试,并在用户弹出窗口阻止程序禁用地图时提醒用户:

http://jsfiddle.net/WDFNL/1/

function openMapWindow (data) {
    var mapForm = document.createElement("form");
    mapForm.target = "Map";
    mapForm.method = "POST"; // or "post" if appropriate
    mapForm.action = "/map.php";

    var mapInput = document.createElement("input");
    mapInput.type = "text";
    mapInput.name = "addrs";
    mapInput.value = data;
    mapForm.appendChild(mapInput);

    document.body.appendChild(mapForm);

    map = window.open("", "Map", "status=0,title=0,height=600,width=800");

    if (map) {
        mapForm.submit();
    } else {
        alert('You must allow popups for this map to work.');
    }
}
openMapWindow('-35.308401,149.124298-35.307841,149.124298');

注意map变量。您可以测试它以查看window.open是否返回了窗口句柄,并根据结果采取相应的行动。