【问题标题】:jquery how to clear out modal input fields for reusejquery如何清除模态输入字段以供重用
【发布时间】:2013-07-29 13:32:31
【问题描述】:

我有一个使用 jquery 和 twitter 引导程序的模态表单。我已经设置了模态,所以当这个人取消表单时,/关闭模态我清除输入字段。但是,如果该人再次激活模态并将值输入到字段中,则 dom 仍将字段值视为 null。

这是我的表单 html

<div class="modal fade in" id="forgotPassModal" data-b-view="ForgotPass" data-brite-cid="bview_1" tabindex="-1" aria-hidden="false" style="margin-top: -152.66666662693024px;">
<div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
    <h3>Security questions:</h3>
</div>
<div class="modal-body">
    <p>
        Please answer the following security questions, click 'Submit', and you
        will receive an email containing instructions on how to change your password.
    </p>
    <div class="form-horizontal">
        <fieldset id="forgotPassForm">

            <div class="control-group">
                <label class="span3" "label_4"="">What was the last name of your third grade teacher?</label>
                <div class="controls">
                    <input type="text" class="input-large" id="forgotPass_4">
                </div>
            </div>
            <div class="clearfix">&nbsp;</div>

            <div class="control-group">
                <label class="span3" "label_165"="">What is your maternal grandmother's maiden name, please provide full name?</label>
                <div class="controls">
                    <input type="text" class="input-large" id="forgotPass_165">
                </div>
            </div>
            <div class="clearfix">&nbsp;</div>

        </fieldset>
    </div>
</div>
<div class="modal-footer">
    <button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
    <button class="btn btn-primary forgotPassSubmit">Submit</button>
</div>

这是我的 jquery

    for (var i = 0; i < $forgotPassQuest.questionId.length; i++){
    var questionId = $forgotPassQuest.questionId[i]['id'];
    $('#forgotPass_' + questionId).val(null);
}

$('#forgotPassModal').modal({show:true})
$('.forgotPassSubmit').click(function() {
    var questAnswered = true;
    for (var i = 0; i < $forgotPassQuest.questionId.length; i++){
        var questionId = $forgotPassQuest.questionId[i]['id'];
        questionField = $('#forgotPass_' + questionId);
        questionFieldVal = questionField.val();
        if (questionFieldVal == '' || questionFieldVal == null){
            questAnswered = false;
        } else {}
    }
    if (questAnswered == true) {
        submitAnswers();
    } else {
        alert('please complete your security questions.');
    }
})
$('#forgotPassModal').on('hidden', function () {
    $('#forgotPassModal').remove();
});

现在表单是动态的,可以在用户之间更改。关于在取消/关闭时清除表单但在用户更改值时仍让值被识别的任何想法?

【问题讨论】:

    标签: jquery forms twitter-bootstrap


    【解决方案1】:

    通过使用“删除”.remove(),您可以有效地将整个 DOM 转储到垃圾箱中,从而删除所有事件侦听器。

    因此,您应该只使用$('.modal-body', '#forgotPassModal').empty(); 隐藏您的模态或清除正文。

    【讨论】:

    • 另外,我建议每次使用 AJAX 加载您的模态体。只需请求 RAW HTML 所在的 URL。 :)
    • 这是个糟糕的主意。调用代码和ajax之间的约定应该是内容是json,并且应该只是数据属性(userId,userName),而不是完整的html。这样 ajax 就可以在别处使用了。
    • 这根本不是真的。人们经常从 AJAX 调用返回 HTML(和 JavaScript)。如果您查看 jquery 网站上的 .ajax() 方法定义,您会看到 dataType 参数可以是 xml、json、script 或 html。 api.jquery.com/jquery.ajax
    • 通过使用这个 Whole Body Gets Empty .. 我们不能每次都传递 HTML 元素 .. 只有 Value 必须是 Empty
    【解决方案2】:

    您可以“重置”输入的值,而不是从 DOM 中删除 div

    示例:http://jsfiddle.net/dMbXV/

    $('#forgotPassModal').on('hidden', function () {
        $('input').val('');
    });
    

    【讨论】:

    • 我尝试了上面的代码并将 val 设置为 '' 并且不再从 div 中删除内容。但是,当我重新激活模式在字段中输入值并提交时,我看到这些值是 '' 而不是我刚刚输入的值。我需要做一些改变吗?
    • 有趣。 modal 的隐藏事件是在表单提交之前执行的吗?
    • 在测试用例中我得到了肯定。使用激活模态然后取消。然后激活模态答案并提交。 dom 说有 4 个输入事件,尽管我在页面和结果代码中只看到两个。
    • 如果在表单提交之前调用了 hidden 输入将被清除并在发布时为空。
    • 如果我将 $('#forgotPassModal input') 放入 webkit 开发工具中,我将看到 4 个输入。所以我需要一种方法来清除 dom 的输入但不影响模态,我已经尝试过 .val('') , .val(null) ,我已经删除了但 dom 继续保留旧的空值.所以当我在第二轮提交表单时,即使表单实际上有 2 个字段,我仍然会得到 4 个字段响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2012-03-03
    • 2021-09-27
    • 1970-01-01
    • 2011-10-26
    相关资源
    最近更新 更多