单击表单内的按钮时如何防止刷新页面?

How can I prevent refresh of page when button inside form is clicked?

提问人:bunkdeath 提问时间:10/18/2011 最后编辑:isherwoodbunkdeath 更新时间:8/23/2022 访问量:464141

问:

我在表单中使用按钮时遇到了问题。我希望该按钮调用函数。它确实如此,但会产生刷新页面的不良结果。

我的简单代码是这样的

<form method="POST">
    <button name="data" onclick="getData()">Click</button>
</form>

单击该按钮后,该函数将在刷新页面的情况下调用,这将重置我之前的所有请求,这会影响当前页面,这是上一个请求的结果。

我应该怎么做才能防止页面刷新?

JavaScript 的HTML

评论

0赞 linguini 10/18/2011
您必须指定参数,如果您只是使用 window.location = window.location.href;它将刷新整个页面,并重置您之前的所有请求。请检查:stackoverflow.com/questions/133925/...
0赞 Alex Angas 2/14/2014
如何使 HTML 按钮不重新加载页面的可能重复项
0赞 Jad Chahine 9/16/2016
@bunkdeath:吮吸答案应该被接受。
0赞 bunkdeath 9/19/2016
@JadChahine抱歉,我没有意识到我没有接受答案,感谢您指出这一点。我当时是初学者,不知道自己做了什么或不做了什么。但我不会接受你提到的答案,而是接受那个帮助我的答案:)

答:

90赞 JNDPNT 10/18/2011 #1

让返回 false。这将修复它。getData()

<form method="POST">
    <button name="data" onclick="return getData()">Click</button>
</form>

评论

2赞 Quentin 10/18/2011
事实上。该函数必须返回 false,而不是 .onclickgetData
1赞 JNDPNT 10/18/2011
这就是我的想法,但好吧,修改了答案,所以更清楚。
10赞 8/9/2016
你不需要改变函数 - 你可以只使用 onclick=“getData();返回 false;”
6赞 devasia2112 3/25/2020
type="button"真的是问题所在。
0赞 KattyTheEnby 5/30/2023
为什么会这样?我想了解更多有关这方面的信息。
25赞 James Allardice 10/18/2011 #2

问题在于它触发了表单提交。如果您创建该函数,则它应该停止提交表单。getDatareturn false

或者,也可以使用事件对象的 preventDefault 方法:

function getData(e) {
    e.preventDefault();
}

评论

0赞 JNDPNT 10/18/2011
将传递的 click 事件。
0赞 Quentin 10/18/2011
除了(无需进一步修改)不会传递事件对象。
0赞 RoboMex 12/4/2019
<button name=“data” onclick=“getData($event)”>Click</button>
492赞 detale 11/7/2012 #3

添加到按钮。type="button"

<button name="data" type="button" onclick="getData()">Click</button>

按钮的默认值是 ,它会在您的案例中自行发布表单,并使其看起来像刷新。typesubmit

评论

5赞 2540625 5/1/2015
但这会阻止 HTML5 表单验证(例如,对于 type=“email” 的输入)。
4赞 JBaczuk 9/15/2015
您还可以添加到 onclick:return false;onclick="getData(); return false;"
5赞 Forever Noob 10/6/2016
这是最好的选择。虽然“return false”可能以内联方式工作,但在添加事件侦听器时,我知道没有这样的选项。指定 type=“button” 确实可以节省一天的时间。
11赞 Mehdiway 9/12/2013 #4

[HTML全文]

<form onsubmit="return false;" id="myForm">
</form>

jQuery的

$('#myForm').submit(function() {
    doSomething();
});

评论

0赞 Mutant 9/25/2013
$('.myForm) 应为 $('#myForm)
0赞 raphie 2/9/2014 #5

出于任何原因,在Firefox中,即使我有和在函数中,它也会在函数运行后刷新页面。而且我不知道这是否是一种好的做法,但它对我有用,我插入了 action 属性 .return false;myform.preventDefault();javascript:this.preventDefault();

正如我所说,我尝试了所有其他建议,它们在除 Firefox 之外的所有浏览器中都能正常工作,如果您有同样的问题,请尝试在 action 属性中添加 prevent 事件或 .不要尝试这样做会破坏您的代码。不要问我为什么:-)。javascript:return false;javascript:this.preventDefault();javascript:void(0);

我不认为这是一种优雅的方式,但就我而言,我别无选择。

更新:

如果您收到错误...处理完 AJAX 后,删除属性操作,并在属性中执行函数,然后返回 false:onsubmit

onsubmit="functionToRun(); return false;"

我不知道为什么Firefox会遇到所有这些麻烦,但希望这能奏效。

3赞 Manik Sood 9/17/2014 #6
<form method="POST">
    <button name="data" onclick="getData()">Click</button>
</form>

不要使用按钮标记,而应使用输入标记。喜欢这个

<form method="POST">
    <input type = "button" name="data" onclick="getData()" value="Click">
</form>

评论

0赞 Pardeep Jain 4/17/2016
但这并没有创建按钮button type='button'
2赞 repzero 7/7/2015 #7

禁用按钮本身的 javascript 方法

document.getElementById("ID NAME").disabled = true;

一旦所有表单字段都满足您的条件,您就可以重新启用该按钮

使用 Jquery 是这样的

$( "#ID NAME" ).prop( "disabled", true);
-2赞 Rasmi Ranjan Pradhan 8/24/2016 #8

你可以使用 ajax 和 jquery 来解决这个问题:

<script>
    function getData() {
        $.ajax({
            url : "/urlpattern",
            type : "post",
            success : function(data) {
                alert("success");
            } 
        });
    }
</script>
<form method="POST">
    <button name="data" type="button" onclick="getData()">Click</button>
</form>

评论

0赞 reZach 4/8/2019
这个答案过于复杂,更不用说需要外部库来防止 OP 的问题,而可以使用其他更简单的方法。
30赞 user8564339 9/5/2017 #9

您需要做的就是放置一个类型标签并制作类型按钮。

<button id="btnId" type="button">Hide/Show</button>

这样就解决了问题

评论

3赞 mjk 9/5/2017
你能详细说明并解释一下原因吗?
1赞 Ganesh Kodiganti 3/5/2020
在表单中,按钮的默认行为是提交类型,将其更改为按钮类型时,可以避免发布
0赞 KattyTheEnby 5/30/2023
这是一个很好的解释,@Ganesh Kodiganti!
0赞 Harsha Vardhini 11/10/2017 #10

返回函数并非在所有情况下都有效。 我试过这个:

<button id="Reset" class="Button-class" onclick="return Reset()">Show result</button>

它对我不起作用。

我试图在函数中返回 false,它对我有用。

function Reset()
{
    .
    .
    .
    return false;
}
0赞 Tasnim Fabiha 4/5/2018 #11

我面临着同样的问题。问题出在功能上。函数应该没有任何问题。它通过使函数返回 false 来工作。onclickgetDataonclick

<form method="POST">
    <button name="data" onclick="getData(); return false">Click</button>
</form>
4赞 Thusitha Deepal 5/16/2019 #12

如果你的按钮是默认的 “button”,请确保你显式设置了 type 属性,否则 WebForm 会默认将其视为提交。

如果你使用JS,请这样做

<form method="POST">
   <button name="data"  type="button" id="btnData" onclick="getData()">Click</button>
</form> 

**If you use jquery use like this**


<form method="POST">
   <button name="data"  type="button" id="btnData">Click</button>
</form>




$('#btnData').click(function(e){
   e.preventDefault();
   // Code goes here
getData(); // your onclick function call here

});
1赞 HAPPY SINGH 5/16/2019 #13

这是最好的解决方案:

<form  method="post"> 
    <button  type="button" name="data" onclick="getData()">Click Me</button>
</form>

注意:我的代码非常简单。

0赞 iYazee6 5/19/2021 #14

我更新了@JNDPNT答案,这样函数(getData())就不必返回false;

 <form method="POST">
    <button name="data" onclick="getData(); return false;">Click</button>
</form>
-1赞 realsajeel289 6/10/2021 #15

添加单击按钮时要调用的函数的启动e.preventDefault();

例:

    const signUp = (e) => {
    e.preventDefault()
    try {
    } catch (error) {
      console.log(error.message)
    }
  }

按钮代码:

            <input
              type='submit'
              name='submit-btn'
              id='submit-btn'
              value='Sign Up'
              onClick={signUp}
            />
0赞 Carter 7/16/2021 #16

我发现的一个简单的问题是,如果您尝试调用的函数被调用,则表单将以任何一种方式提交。submit

您需要重命名该函数,以免重新加载页面