【问题标题】:Specifying forms in laravel在 laravel 中指定表单
【发布时间】:2019-01-17 07:22:38
【问题描述】:

我有将附加到刀片视图codes below 的数据,它们中的每一个都被扭曲成一个表单,问题是发送到后端的数据总是来自第一个表单(不知何故,其他表单数据将被忽略) .

我的表单是什么样子的:

从第一个表单发送数据 ID = 7

从第二个表单发送数据 Still ID 7

代码

<script defer>
  $(document).ready(function() {
   $("body").on("click", ".savedynspecto", function(e){
      var form = $(this).closest('form');
      var id = form.find('input[name="product_id"]').val();
      // e.preventDefault();
      $.ajax({
        type: "post",
        url: '{{ url('admin/spacssendto') }}',
        data: {
          '_token': $('input[name=_token]').val(),
          'product_id': id,
          'subspecifications': $(this).closest('form').find('select.subspecifications').val()
        },
        success: function (data) {
          alert('Specifications added successfully.');
        },
        error: function (data) {
          console.log('Error!');
        }
      });
    });
  });
</script>

Controller

public function spacssendto(Request $request) {

        $testingdata = $this->validate($request, array(
          'product_id' => 'required',
          'subspecifications' => 'required',
        ));
        $product = Product::find($request->product_id);
        $product->subspecifications()->sync($request->subspecifications, false);

        return response()->json($testingdata);
    }

我的表单的 HTML 输出

<tr>

  <form method="POST" action="http://site.pp/admin/products/15/edit" accept-charset="UTF-8">

  </form>
  <input name="_token" value="DLrcOa0eOm90e4aaGSYp2uCeiuKtbGCT9fCOUP16" type="hidden">

  <input name="product_id" id="product_id" value="15" type="hidden">

  <td>Graphic</td>

  <td>

    <select class="subspecifications form-control tagsselector" id="subspecifications" name="subspecifications[]" multiple="multiple">

      <option value="7">Intel 920</option>

    </select>

  </td>

  <td class="text-center">

    <button type="button" id="savedynspecto" class="savedynspecto btn btn-md btn-success"><i class="fa fa-check"></i> Save</button>

  </td>

</tr>

注意:

让我好奇的是,为什么我的表单打开后立即关闭!

<tr>
 <form method="POST" action="http://site.pp/admin/products/15/edit" accept-charset="UTF-8">

  </form>
...

这是我的行将如何附加到刀片

var my_row = $('<tr>');
var my_html = '{{ Form::open() }}<input name="product_id" id="product_id" type="hidden" value="{{$product->id}}"><td>'+value1.title+'</td>';
my_html += '<td><select class="subspecifications form-control tagsselector" id="subspecifications" name="subspecifications[]" multiple="multiple">'+helpers+'</select></td>';
my_html += '<td class="text-center"><button type="button" id="savedynspecto" class="savedynspecto btn btn-md btn-success"><i class="fa fa-check"></i> Save</button></td>{{Form::close()}}</tr>';
my_row.html(my_html);
$('#addcustomstr').append(my_row);

如您所见,我的{{ Form::open() }} 在第一个&lt;td&gt; 之前,而{{Form::close()}} 就在&lt;/tr&gt; 之前,但是为什么在它打开后就关闭了?

有什么想法吗?

【问题讨论】:

  • $('#addcustomstr').append(my_row); 代码何时调用?乍一看,您使用的是{{ $product-&gt;id }},当从服务器加载时,假设为 1。如果您多次调用$('#addcustomstr').append(my_row);,每个&lt;input&gt; 将具有相同的值 1。
  • @TimLewis 没错,因为这个想法是每个表单都有产品 ID,在这种情况下,所有产品 ID 都是相同的(我正在编辑页面中工作)
  • 对对对。我现在看到了。关于无效 HTML,您实际上可以删除您的 &lt;form&gt; 元素,为您的每个 &lt;tr&gt; 添加一个类,例如 ssWrapper 并在您的 . savedynspecto 点击函数中定位它;由于您使用的是 AJAX,因此您并不真正需要那里的表单元素。
  • @TimLewis 好的,你能给我定位那个类的样本吗?
  • 这就是&lt;td class="ssWrapper"&gt;;我说。此外,您可以在 JS 中使用 _token: "{{ csrf_token() }}"(假设您在 .blade.php 文件中)

标签: php jquery ajax laravel-blade


【解决方案1】:

您的 HTML 格式不正确。您有一个 input 元素作为 tr 元素的直接后代。只有tdth 被允许作为tr 元素的直接后代。将隐藏的输入字段放在td 标签内,如下所示:

var my_html = '{{ Form::open() }}<td><input name="product_id" id="product_id" type="hidden" value="{{$product->id}}">'+value1.title+'</td>';

并检查它是否有效。

编辑:当然,这也是格式错误的 HTML,因为 form 元素也不允许在 tr 元素内。而是将整个表格包裹在一个表单标签中。

【讨论】:

  • 那行不通,兄弟(如果我把我的 tr 放在表单中)它会阻止我的数据被追加
  • 问题是,您不能将表单作为表格或表格行的直接后代。您要么必须将整个表格放入表格中,要么将表格放入表格单元格中,或者不要使用表格。检查这个问题的答案:stackoverflow.com/questions/5967564/form-inside-a-table
  • 如果我添加另一个表格主体并在该表格中扭曲 tr 怎么办?
  • 您不能用表单包装表格行元素,因为表格元素不能是表格元素的直接后代。
  • 在这种情况下,我应该只使用引导的行类,而不能使用表对吗?
【解决方案2】:

已解决

感谢所有尝试提供帮助的人,因为有人警告我 tr td 不允许使用表格能够毫无问题地运行我的表单。

【讨论】:

    猜你喜欢
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    相关资源
    最近更新 更多