javascript - 单击按钮时防止默认值不随机工作

标签 javascript c# jquery asp.net-mvc razor

查看一些旧代码,发现 e.preventdefault() 在单击按钮时行为不正确。我不知道我以前怎么没有注意到这一点,但由于某种原因,它只是 Simpy 没有完成它的工作。即使执行了 If 语句,页面仍然会刷新。我是不是错过了什么,我是不是瞎了眼?谁能告诉我这是怎么回事吗?

另外,我想补充一点,它肯定会进入 IF 语句,因为需要取消隐藏的 DIV 确实会显示,但是页面无论如何都会刷新,并且会提交不应该提交的内容。

下面是我的代码:

谢谢。

表格:

    <form class="form-group" method="get" action="#">
    <div class="row">
        <div class="col-md-12">
            <table class="table table-striped table-hover table-bordered">
                <thead>
                    <tr>
                        <th>Terminal</th>
                        <th>Command</th>
                        <th>Command Value</th>
                        <th> </th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>@Html.DropDownListFor(o => o.TerminalsDDL, Model.TerminalsDDL, new { id = "ddlTerminalID", @class = "form-control align-middle" })</td>
                        <td onchange="UpdateHelpDescript();">@Html.DropDownListFor(o => o.TerminalCommandLookupsDDL, Model.TerminalCommandLookupsDDL, new { id = "ddlCommandValue", @class = "form-control align-middle" })</td>
                        <td>@Html.TextBoxFor(o => o.UserEnteredTerminalCommands, new { Class = "form-control align-middle", Id = "cmdValueValue" })</td>
                        <td> <input id="btnSaveTerminalCommand" type="button" value="Insert" class="btn btn-primary align-middle" /> </td>
                </tbody>
            </table>
        </div>
    </div>
</form>

JS:

   $(function () {
    $("#btnSaveTerminalCommand").click((e) => {

        if ($("#ddlCommandValue").val() == " " || $("#ddlCommandValue").val() == null || $("#ddlCommandValue").val() == 0 || $("#cmdValueValue").val() == " " || $("#cmdValueValue").val() == null) {

             //window.alert("Please select a valid command.");
             $("#alertPopUp").removeClass("hidden");
             e.preventDefault();
            e.stopImmediatePropagation();
        };

        var data = {
            TerminalID: $("#ddlTerminalID").val(),
            CommandID: $("#ddlCommandValue").val(),
            CommandValue: $("#cmdValueValue").val()
        };

        $.ajax({
            url: '@Url.Action("AddTerminalCommand", "TerminalCommand")',
            type: "POST",
            data: data,
            success: function (response) {
                console.log("Success");
                window.location.href = response.Url;
            }
        });
    });
});

最佳答案

只有当条件为真时,您才阻止默认行为,但实际上您希望始终阻止默认行为,因为您正在使用ajax

 $("#btnSaveTerminalCommand").click((e) => {
         e.preventDefault();
         if(....)

在条件中添加一个return以防止ajax使用无效数据执行

另请注意,$(selector).val() 将返回字符串,而不是 null

关于javascript - 单击按钮时防止默认值不随机工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57171201/

相关文章:

javascript - 如何使用生命周期方法 getDerivedStateFromProps 而不是 componentWillReceiveProps

c# - 找不到页面 - VS2012 FTP 发布后的 .aspx Webapplication

c# - 为什么GetManifestResourceStream调用GetManifestResourceNames时资源名存在却返回null?

jquery - Cordova/Jquery Mobile - 单击按钮激活两个页面?

javascript - 为任何聚焦元素触发按键点击事件

javascript - jQuery 选项 appendTo 选择移动到下一个选项而不是选择一个

javascript - 英雄横幅轮播与 Gatsby + Contentful + react 响应式轮播

javascript - 没有输入的 jQuery 日期选择器

javascript - 除了通过这些方法之外,还能如何插入javascript?

c# - ProgressBar 不更新