检查HTML表单上的空字段

时间:2015-03-19 12:55:31

标签: javascript html forms

我正在尝试使用HTML创建表单,并尝试确保任何字段都不会为空。

以下是表单的HTML

<form role="form" id="companyDetails" name="companyDetails" method="post" action="saveCompanyDetails.jsp" onsubmit="return false;">
    <div class="col-lg-6">
        <div class="form-group">
            <label>Company Name</label>
            <input type="text" class="form-control" id="cmpname" name="cmpname">
            <p id="cmpnameError" style="display: none; color: red; font-weight: bold;"></p>
        </div>
        <div class="form-group">
            <label>Description</label>
            <textarea class="form-control" rows="3" id="desc" name="desc"></textarea>
            <p id="descError" style="display: none; color: red; font-weight: bold;"></p>
        </div>
        <div class="form-group">
            <label>Url</label>
            <input type="text" class="form-control" name="url" id="url">
            <p id="urlError" style="display: none; color: red; font-weight: bold;"></p>
        </div>
        <div class="form-group">
            <label>Email Id</label>
            <input type="text" class="form-control" name="emailid" id="emailid">
            <p id="emailidError" style="display: none; color: red; font-weight: bold;"></p>
        </div>
        <div class="form-group">
            <label>Address</label>
            <textarea class="form-control" rows="3" id="address" name="address"></textarea>
            <p id="addressError" style="display: none; color: red; font-weight: bold;"></p>
        </div>
        <h1>All Links <i class="fa fa-link"></i></h1>
        <div class="form-group">
            <label>Facebook Link</label>
            <input type="text" class="form-control" name="fblink" id="fblink">
            <p id="fblinkError" style="display: none; color: red; font-weight: bold;"></p>
        </div>
        <div class="form-group">
            <label>Twitter Link</label>
            <input type="text" class="form-control" name="twlink" id="twlink">
            <p id="twlinkError" style="display: none; color: red; font-weight: bold;"></p>
        </div>
    </div>

<!-- /.col-lg-6 (nested) -->
    <div class="col-lg-6">
        <div class="form-group">
            <label>Linkedin Link</label>
            <input type="text" class="form-control" name="linkinlink" id="linkinlink">
            <p id="linkinlinkError" style="display: none; color: red; font-weight: bold;"></p>
        </div>
        <div class="form-group">
            <label>Download Link</label>
            <input type="text" class="form-control" name="downlink" id="downlink">
            <p id="downlinkError" style="display: none; color: red; font-weight: bold;"></p>
        </div>
        <div class="form-group">
            <label>Live Help Link</label>
            <input type="text" class="form-control" name="livehelplink" id="livehelplink">
            <p id="livehelpError" style="display: none; color: red; font-weight: bold;"></p>
        </div>
        <div class="form-group">
            <label>Terms & Condition Link</label>
            <input type="text" class="form-control" name="tclink" id="tclink">
            <p id="tclinkError" style="display: none; color: red; font-weight: bold;"></p>
        </div>
        <div class="form-group">
            <label>Promotion Link</label>
            <input type="text" class="form-control" name="prolink" id="prolink">
            <p id="prolinkError" style="display: none; color: red; font-weight: bold;"></p>
        </div>
        <div class="form-group">
            <label>Sign Up Link</label>
            <input type="text" class="form-control" name="signuplink" id="signuplink">
            <p id="signuplinkError" style="display: none; color: red; font-weight: bold;"></p>
        </div>
        <div class="form-group">
            <label>Affiliate Link</label>
            <input type="text" class="form-control" name="affiliatelink" id="affiliatelink">
            <p id="affiliatelinkError" style="display: none; color: red; font-weight: bold;"></p>
        </div>
        <div class="form-group">
            <label>Game Link</label>
            <input type="text" class="form-control" name="gamelink" id="gamelink">
            <p id="gamelinkError" style="display: none; color: red; font-weight: bold;"></p>
        </div>
        <button type="submit" class="btn btn-default" onclick="submitData()"><i class="fa fa-check"></i>Submit</button>
        <button type="reset" class="btn btn-default"><i class="fa fa-refresh"></i>Reset</button>
    </div>  
</form>

请注意,我在每个输入字段的下方都有一个<p>标记,其ID值是根据其相应输入字段的ID构造的。例如。文本字段<p>下方的cmpname标记的ID为cmpnameError

现在,用于在文本字段下方显示错误消息的JavaScript代码如下所示

function submitData()   {
var elements = document.querySelectorAll('#companyDetails input, #companyDetails textarea');

for (var i = 0; i < elements.length; i++)   {
    if (elements[i].value == "")    {
        var errorElementId = "#" + elements[i].id + "Error";
        // alert("Generated ID is " + errorElementId);
        document.getElementById(errorElementId).style.display = '';
        document.getElementById(errorElementId).innerHTML = "Please enter a value for this field";
        return false;
    }
}
document.forms['companyDetails'].submit();
return true;
}

我的问题是,当我点击提交时,表单上没有显示正确的错误消息。

有人可以帮我解决这个问题吗?非常感谢你提前。

这是JSFiddle链接 - https://jsfiddle.net/v8ooy2e1/

4 个答案:

答案 0 :(得分:1)

井号用于使用id选择querySelectorAll s的元素,但不应与getElementById一起使用。

在此删除英镑符号:

var errorElementId = "#" + elements[i].id + "Error";

应该是:

var errorElementId = elements[i].id + "Error";

Working Fiddle

答案 1 :(得分:0)

你知道,假设IE 10+,你可以跳过所有这些javascript的幻想,只需使用&#34; required&#34;属性:

<input type="text" class="form-control" id="cmpname" name="cmpname" required>

这将调用浏览器支持的表单验证。

答案 2 :(得分:0)

为什么你有:

var errorElementId = "#" + elements[i].id + "Error";

省略“#”标志。

答案 3 :(得分:0)

如果你可以使用jQuery

  var isValid = true;
$("#companyDetails").submit(function(event) {
    $("input").each(function() {
        var element = $(this);
        if (element.val() == "") {
            isValid = false;

        }
    })
    if (!isValid) {
        alert("nopes");

    }
});

FIDDLE