Javascript 将提交按钮替换为值

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"

我继承了一个网页,其中包含一些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" 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份