【问题标题】:Value of an input button should be changed after click event with jquery输入按钮的值应在单击事件后使用 jquery 更改
【发布时间】:2021-05-20 12:03:45
【问题描述】:

我尝试在单击输入按钮后更改它的值。按钮本身是一个提交按钮,控制器通过 RedirectToAction 回到页面。我的问题是,我可以更改按钮的值,但是这个新值只显示一毫秒,然后它被设置回原来的值。脚本触发后页面是否重新加载?或者为什么脚本触发后按钮值被设置回来?

这是我的代码: 按钮:

@using (Html.BeginForm("StartNewM2OLIEProcess", "Patient", new { label = Model.PatientID }, FormMethod.Post))
        {
            <input type="submit" id="btnStartProcess" value="M²OLIE Prozess starten" class="btn btn-primary" />
        }

脚本

@section Scripts{

    <script type="text/javascript">
       
        $("#btnStartProcess").on('click', function () {
            var self = $(this);
            var errorMsg = '@errorMsg';
            if (errorMsg == '') {
                //self.attr('M2OLIE Prozess starten', 'Prozess gestartet');
                self.val('Prozess läuft...');
            }
            else {
                self.val("M²OLIE Prozess starten");
            }
        });

    </script>

    <script type="text/javascript">
    var message = '@message';
    if(message){
        alert(message);
    }
    </script>
}

所以脚本被正确触发,我可以使用调试器进行测试。而且我还可以看到在调试过程中按钮的值发生了变化,但是一旦脚本结束,值就会变回 Html 表单中定义的值。这里发生了什么?

【问题讨论】:

    标签: c# jquery redirecttoaction


    【解决方案1】:

    当第一次点击时,jQuery事件被执行,然后页面被发送到action。 您必须发布页面或管理点击事件。

    用你的脚本测试这段代码

    $("form").submit(function (e) {
        e.preventDefault(); 
    });
    

    我给你举个例子,看看表单发布后的变化。

    在控制器中

    [HttpGet]
    public ActionResult StartNewM2OLIEProcess()
    {
        return View();
    }
    [HttpPost]
    public ActionResult StartNewM2OLIEProcess(string myText)
    {
        ViewBag.ButtonText = myText;
        return View();
    }
    

    在视图中

    @{
        ViewBag.Title = "Test";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    @using (Html.BeginForm("StartNewM2OLIEProcess", "Home", FormMethod.Post))
    {
        string buttonValue = "M²OLIE Prozess starten";
        if (!string.IsNullOrEmpty(ViewBag.ButtonText))
        {
            buttonValue = ViewBag.ButtonText;
        }
        <input type="text" id="myText" name="myText" />
        <input type="submit" id="btnStartProcess" value="@buttonValue" class="btn btn-primary" />
    }
    <div id="myDiv" style="width:300px;height:50px;background:#FF5511;color:white;text-align:center;font-weight:bold;"></div>
    @section scripts{
        <script>
           var result = '@(ViewBag.ButtonText)';
           if (result != null) {
               document.getElementById("myDiv").innerText = result;
           }
        </script>    
    }
    

    【讨论】:

    • 非常感谢,该按钮现在可以使用了!但是现在我不能再触发我的警报消息(第二个脚本)了。我想要做的是更改按钮的标签/值,同时提醒一个消息框作为用户的反馈,该过程已成功启动。我怎样才能两者兼得?
    • 那么你到底想要什么?您不能同时使用两个按钮。您可以在发布表单后应用更改,也可以使用脚本发布表单,页面不会重新加载,更改将保留。
    • 好的,我想通过按下按钮来做两件事:首先,我想通知用户进程已成功启动。其次,我想更改按钮上的值。这两件事都应该在网页重新加载后发生。
    • 我意识到了。我将发布一个示例供您查看它是如何工作的
    • 是的,就是这样!非常感谢,你拯救了我的一天!
    猜你喜欢
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多