Javascript 将提交按钮替换为值
我继承了一个网页,其中包含一些HTML,如下所示:Javascript 将提交按钮替换为值,javascript,Javascript,我继承了一个网页,其中包含一些HTML,如下所示: <input type="submit" value="1">Submit 1</input> <input type="submit" value="2">Submit 2</input> <input type="submit" value="3">Submit 3</input> 我需要更改此代码,以便可以使用以下代码 <input type="button"
<input type="submit" value="1">Submit 1</input>
<input type="submit" value="2">Submit 2</input>
<input type="submit" value="3">Submit 3</input>
我需要更改此代码,以便可以使用以下代码
<input type="button" onclick="onSubmitClick(1);">Submit 1</input>
<input type="button" onclick="onSubmitClick(2);">Submit 2</input>
<input type="button" onclick="onSubmitClick(3);">Submit 3</input>
<script type="text/javascript">
function onSubmitClick(val) {
// do something with val
$('#myForm').submit();
}
</script>
我的问题是,对于第一个代码,服务器收到了值,即1、2、3。在我要更改的代码中,1、2和3不再绑定到我的服务器代码。我该如何补救 理想情况下:使用常规提交按钮,并使用JavaScript逐步增强 如果您需要在JavaScript中执行异步操作,则可能不需要这样做,在这种情况下:将值存储在表单中的隐藏输入中 理想情况下,在执行此操作时,请继续使用常规提交按钮 例如,由于您已经在使用jQuery:
<form id="myForm">
<button value="1">Submit 1</button>
<button value="2">Submit 2</button>
<button value="3">Submit 3</button>
</form>
<script>
$f = $("#myForm");
$f.find("button[type=submit]").on("click", remember_button);
$f.on("submit", on_submit_click);
function remember_button() {
var val = $(this).val();
var $remembered_button = $f.find(".remembered_button");
if (!$remembered_button.length) {
$remembered_button = $("<input>")
.attr("type", "hidden")
.attr("name", "button_value")
.addClass("remembered_button")
.appendTo($f);
}
$remembered_button.val(val);
}
on_submit_click(event) {
event.preventDefault();
var val = $f.find(".remembered_button").val();
$f.submit();
}
</script>
您需要向表单中添加一个值,然后可以设置该值,并将其发送到PHP服务器:
<input type="button" onclick="onSubmitClick(1);">Submit 1</input>
<input type="button" onclick="onSubmitClick(2);">Submit 2</input>
<input type="hidden" name="submit" id="submitid">
<script type="text/javascript">
function onSubmitClick(val) {
// do something with val
$('#submitid').val(val)
$('#myForm').submit();
}
</script>
<script type="text/javascript">
function onSubmitClick(val) {
// do something with val
$('#myForm').submit();
}
</script>
在本例中,我使用新的HTML标记创建了一个值。我将它设置为隐藏,这样用户就不会看到它,也不会更改它。它只能从JavaScript和开发工具中更改
我给它标记的ID,并使用jQuery val函数设置函数参数中的值
更多信息:
如前所述,如果您已经在使用jQuery,那么还有另一种选择 您可以编写自定义事件,使用val,然后将其与表单数据合并,然后再使用请求手动过帐 假设使用以下HTML:
<form id="myForm" action="http://YourTargetUrl" method="post" accept-charset="utf-8">
<input name="ExampleFormData" type="text">
<input data-type="submit" type="button" value="1">Submit 1
<input data-type="submit" type="button" value="2">Submit 2
<input data-type="submit" type="button" value="3">Submit 3
</form>
如果必须像上次提交一样重新加载页面,则可以使用$.ajax success或类似的完整回调函数
$.ajax({
type: 'POST',
url: $form[0].action,
data: $.param(data),
success: function() {
location.reload();
}
});
使用ajax调用的好处是,您可以同时使用错误回调,处理来自服务器的任何错误,例如,如果需要,在UI上显示错误,同时仅在成功请求时重新加载页面
另一个好处是,您可以根据需要从任意位置向请求添加更多数据、逻辑数据以及表单标记之外的元素的值
下面的代码段已注释掉location.reload,因此您可以查看表单数据的控制台条目
$('[data-type=submit]').on('click', function(e, val) {
var $form = $('#myForm');
var val = this.value;
// do somethign with val
var data = $form.serializeArray();
// add val to the post data, using the variable name on the server as "name" for the serialize on the server side to map it to the correct variable.
data.push({
name: "theNameOfYourVariableOnServerReceivingVal",
value: val
});
// Manually execute a post request to the server
// Using the form's action attribute, containing the target URL to post to
// and using $.param to serialize the data array before posting
$.ajax({
type: 'POST',
url: $form[0].action,
data: $.param(data)
});
});
$'[data type=submit]'。单击,函数E,val{
var$form=$'myForm';
var val=该值;
//和瓦尔做点什么
var data=$form.serializeArray;
//将val添加到post数据,使用服务器上的变量名作为服务器端序列化的名称,将其映射到正确的变量。
数据推送{
name:theNameOfYourVariableOnServerReceivingVal,
值:val
};
//显示要发布的合并表单数据
控制台日志数据;
//显示为请求序列化的表单数据
console.log$.paramdata;
//手动执行对服务器的post请求
//使用表单的action属性,包含要发布到的目标URL
//并在过帐之前使用$.param序列化数据数组
$.ajax{
键入:“POST”,
url:$form[0]。操作,
数据:$.paramdata,
成功:功能{
//仅在请求成功时执行
//如果希望仅在请求成功时重新加载页面
//成功后手动重新加载
//位置。重新加载;
},
错误:函数{
//仅在请求返回时出错时执行
//如果要处理来自服务器的错误
//在这里做
},
完成:功能{
//无论错误或成功,请求完成时始终执行。
//如果必须每次重新加载页面,忽略错误
//完成后手动重新加载页面。
//位置。重新加载;
}
};
};
提交1
提交2份
提交3份