Javascript 当“打开”时关闭窗口;输入“;不是空的

Javascript 当“打开”时关闭窗口;输入“;不是空的,javascript,jquery,html,input,Javascript,Jquery,Html,Input,所以我的脚本中有一个表单,所以有很多输入标记。当有人在输入中写入内容并意外关闭页面时,应显示: alert("You have to fill the whole form."); 这是我现在的代码: HTML 我的问题是,我做错了什么?您需要运行代码并注意拼写错误,还要检查控制台!就您的代码而言,您看到的第一个错误是: Uncaught TypeError: Object #<HTMLDocument> has no method 'getElementByTagName' U

所以我的脚本中有一个表单,所以有很多输入标记。当有人在输入中写入内容并意外关闭页面时,应显示:

alert("You have to fill the whole form.");
这是我现在的代码:

HTML


我的问题是,我做错了什么?

您需要运行代码并注意拼写错误,还要检查控制台!就您的代码而言,您看到的第一个错误是:

Uncaught TypeError: Object #<HTMLDocument> has no method 'getElementByTagName'
Uncaught TypeError:对象#没有方法“getElementByTagName”
这是因为正确的方法是
getElementsByTagName
(请参见“s”)?使用
getElementById
以单个元素为目标,否则将收到一个集合。除此之外,是打字错误


如果仍然使用
getElementsByTagName
——只需针对所需元素的正确索引!因此,如果您只有1个输入,请使用
[0]

您需要运行代码并注意拼写错误,还需要检查控制台!就您的代码而言,您看到的第一个错误是:

Uncaught TypeError: Object #<HTMLDocument> has no method 'getElementByTagName'
    <!DOCTYPE html>
<html>
<head>
    <title>Demo Page</title>
</head>
<body>
    <input type="email" placeholder="email">
    <input type="text" placeholder="2">
    <input type="text" placeholder="3">
    <input type="text" placeholder="4">
       <br/>
    <input type="radio">
        <input type="checkbox">

    <script type="text/javascript">
        window.onbeforeunload = function (e) {
        var input = document.getElementsByTagName("input");
        var returnArr = [];
        for (var i = 0; i < input.length; i++) {
            if((input[i].value == "" && (input[i].type == 'text' || input[i].type == 'email')) || (input[i].checked == false && input[i].type != 'text') ){
            returnArr.push(false);
        }
            else{
                returnArr.push(true);
            }
        };
        returnArr = sort_unique(returnArr);
        if(returnArr[0] == false && returnArr[1] == true)
        return "You have to fill the whole form.";
    };

    function sort_unique(arr) {
        arr = arr.sort(function (a, b) { return a*1 - b*1; });
        var ret = [arr[0]];
        for (var i = 1; i < arr.length; i++) { // start loop at 1 as element 0 can never be a duplicate
        if (arr[i-1] !== arr[i]) {
            ret.push(arr[i]);
        }
        }
        return ret;
    }
    </script>
</body>
</html>
Uncaught TypeError:对象#没有方法“getElementByTagName”
这是因为正确的方法是
getElementsByTagName
(请参见“s”)?使用
getElementById
以单个元素为目标,否则将收到一个集合。除此之外,是打字错误

如果仍然使用
getElementsByTagName
——只需针对所需元素的正确索引!因此,如果您只有1个输入,请使用
[0]


    <!DOCTYPE html>
<html>
<head>
    <title>Demo Page</title>
</head>
<body>
    <input type="email" placeholder="email">
    <input type="text" placeholder="2">
    <input type="text" placeholder="3">
    <input type="text" placeholder="4">
       <br/>
    <input type="radio">
        <input type="checkbox">

    <script type="text/javascript">
        window.onbeforeunload = function (e) {
        var input = document.getElementsByTagName("input");
        var returnArr = [];
        for (var i = 0; i < input.length; i++) {
            if((input[i].value == "" && (input[i].type == 'text' || input[i].type == 'email')) || (input[i].checked == false && input[i].type != 'text') ){
            returnArr.push(false);
        }
            else{
                returnArr.push(true);
            }
        };
        returnArr = sort_unique(returnArr);
        if(returnArr[0] == false && returnArr[1] == true)
        return "You have to fill the whole form.";
    };

    function sort_unique(arr) {
        arr = arr.sort(function (a, b) { return a*1 - b*1; });
        var ret = [arr[0]];
        for (var i = 1; i < arr.length; i++) { // start loop at 1 as element 0 can never be a duplicate
        if (arr[i-1] !== arr[i]) {
            ret.push(arr[i]);
        }
        }
        return ret;
    }
    </script>
</body>
</html>
演示页
window.onbeforeunload=函数(e){ var input=document.getElementsByTagName(“输入”); var returnArr=[]; 对于(变量i=0;i
希望此代码块适用于您。:) 我已经在chrome和mozilla firefox上测试过了。它正在工作。


演示页

window.onbeforeunload=函数(e){ var input=document.getElementsByTagName(“输入”); var returnArr=[]; 对于(变量i=0;i
希望此代码块适用于您。:)
我已经在chrome和mozilla firefox上测试过了。它正在工作。

查看您的代码,我可以发现很多问题

1.“getElementByTagName”应为“getElementsByTagName”,此函数返回符合条件的元素列表/数组,因此您必须从数组中获取元素并进行验证

我已经编辑了代码,它适合我。检查它是否符合你的目的

<html>
<head>
</head>
<body>
<input placeholder="name" />
<script type="text/javascript">
window.onbeforeunload = function () { 
var inputs = document.getElementsByTagName("input");
var input = inputs[0];

if (input.value.length > 0){
    return "You have to fill the whole form.";
}
};
</script>
</body>
</html>

window.onbeforeunload=函数(){
var inputs=document.getElementsByTagName(“输入”);
var输入=输入[0];
如果(input.value.length>0){
return“您必须填写整个表格。”;
}
};

查看您的代码,我可以发现很多问题

1.“getElementByTagName”应为“getElementsByTagName”,此函数返回符合条件的元素列表/数组,因此您必须从数组中获取元素并进行验证

我已经编辑了代码,它适合我。检查它是否符合你的目的

<html>
<head>
</head>
<body>
<input placeholder="name" />
<script type="text/javascript">
window.onbeforeunload = function () { 
var inputs = document.getElementsByTagName("input");
var input = inputs[0];

if (input.value.length > 0){
    return "You have to fill the whole form.";
}
};
</script>
</body>
</html>

window.onbeforeunload=函数(){
var inputs=document.getElementsByTagName(“输入”);
var输入=输入[0];
如果(input.value.length>0){
return“您必须填写整个表格。”;
}
};

解决方案,基于jQuery。在FF和铬中测试

window.onbeforeunload = function() {
    var empty = false;

    $('input').each( function() {
        if ( $(this).val() == '' ) {
            empty = true;
            return false;
        }
    });

    if ( empty ) return 'You have to fill the whole form.';
}

解决方案,基于jQuery。在FF和铬中测试

window.onbeforeunload = function() {
    var empty = false;

    $('input').each( function() {
        if ( $(this).val() == '' ) {
            empty = true;
            return false;
        }
    });

    if ( empty ) return 'You have to fill the whole form.';
}

拼写错误的长度长度?应为
input.value.length
。。。以后,请给出您收到的错误消息。此外,您可能希望检查该值是否不是一堆空格。请使用getElementById并检查此post OnForeUnload函数。并非每个浏览器都支持拼写错误的长度长度?应为
input.value.length
。。。以后,请给出您收到的错误消息。此外,您可能需要检查该值是否不是一堆空格。请使用getElementById并检查此post onbeforeunload函数。并非每个浏览器@DOCTYPEHTML都支持此函数——因为您返回了一个集合,所以请编写一个循环来迭代每个元素,然后进行检查这是正确的解决方案@DOCTYPEHTML,
input
是一个类似数组的对象,您必须遍历它