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


148

使用表单内的按钮时出现问题。我希望该按钮调用功能。它确实可以,但是刷新页面的结果不理想。

我的简单代码是这样的

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

单击按钮后,该函数将在页面刷新时被调用,这会重置所有我先前的请求,这会影响到当前页面,这是先前请求的结果。

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


如果您仅使用window.location = window.location.href,则必须指定参数。它将刷新整个页面,并将重置您以前的所有请求。请检查以下内容:stackoverflow.com/questions/133925/…–
linguini


@bunkdeath:应该接受S
Jad Chahine

@JadChahine对不起,我没有意识到我没有接受答案,谢谢指出。我是一个初学者,不知道自己当时做过或没做过。但我不会接受您提到的答案,而我会接受那个时候对我有帮助的答案:)
bunkdeath 16/09/18

Answers:


67

让我们getData()返回false。这将解决它。

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

1
确实。该onclick函数必须返回false,而不是getData
昆汀

1
这就是我的想法,但是好的,修改了答案,使它更清晰。
JNDPNT 2011年

5
您无需更改功能-您可以使用onclick =“ getData(); return false;”。

2
type="button"真的很重要。
Deepcell

338

添加type="button"到按钮。

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

type按钮的默认值是submit,它会根据您的情况自行发布表单,并使它看起来像刷新一样。


8
这里给出的完美答案
Timberlake

2
除此之外,这会阻止HTML5表单验证(例如用于输入type =“ email”)。
2015年

2
您也可以添加return false;onclick:onclick="getData(); return false;"
JBaczuk 2015年

1
这是最好的选择。尽管“ return false”可能会内联工作,但在添加事件侦听器时没有我知道的这种选项。指定type =“ button”确实可以节省一天。
Forever Noob

1
这实际上是解决此类问题的“官方”解决方案。返回错误的MIGHT也可以,但是类型按钮永远不会失败。
Student0495

18

您需要做的只是放置一个类型标签并单击“类型”按钮。

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

那解决了问题


2
您能详细解释一下吗?
mjk

按钮的默认行为是在表单内时为提交类型,将其更改为按钮类型时,可以避免发布
Ganesh Kodiganti

16

问题在于它触发了表单提交。如果您执行此getData功能return false,则应停止提交表单。

另外,您也可以使用preventDefault事件对象的方法:

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

将传递的click事件。
JNDPNT 2011年

除非(未经进一步修改),否则不会传递事件对象。
昆汀

<button name =“ data” onclick =“ getData($ event)”>点击</ button>
RoboMex

9

的HTML

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

jQuery的

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

$('。myForm)应该是$('#myForm)
Mutant 2013年

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

不要使用按钮标签,而要使用输入标签。像这样,

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

但这个我以前不创建按钮的button type='button'
Pardeep耆那教

3

如果您的按钮是默认的“按钮”,请确保您明确设置了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

});

2

禁用按钮本身的JavaScript方法

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

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

使用一个jQuery将是这样的

$( "#ID NAME" ).prop( "disabled", true);

0

对于任何理由在Firefox,即使我有return false;,并myform.preventDefault();在功能上,它刷新功能运行后的页面。而且我不知道这是否是一个好习惯,但是对我有用,我javascript:this.preventDefault();在action属性中插入。

就像我说的,我尝试了所有其他建议,这些建议在Firefox以外的所有浏览器中都可以正常工作,如果您遇到相同的问题,请尝试在action属性javascript:return false;或中添加prevent事件javascript:this.preventDefault();。不要尝试使用javascript:void(0);它将破坏您的代码。不要问我为什么:-)。

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

更新:

如果在处理ajax之后收到错误...,请删除属性操作,然后在onsubmit属性中执行函数,然后返回假返回值:

onsubmit="functionToRun(); return false;"

我不知道为什么Firefox会遇到所有这些麻烦,但是希望它能起作用。


0

返回功能并非在所有情况下都起作用。我尝试了这个:

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

它对我没有用。

我试图在函数内部返回false,它为我工作。

function Reset()
{
    .
    .
    .
    return false;
}

0

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

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

0

这是最好的解决方案:

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

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


-2

您可以使用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>

这个答案过于复杂,更不用说需要外部库来防止OP的问题,而可以使用其他更简单的方法。
扎克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.