【问题标题】:How to get both the text and value of a select box and store it into the database?如何获取选择框的文本和值并将其存储到数据库中?
【发布时间】:2018-03-20 09:35:21
【问题描述】:

我正在尝试将我拥有的选择框的文本和值存储到我的数据库中。我可以通过从选择框名称本身请求它来正确存储该值,但是我在存储文本时遇到了麻烦。我有 2 个表,即 Item 和 ItemOrder。

物品表

标识 |名字

ItemOrder 表

标识 | item_id(来自项目表的 fk) |物品名称

HTML

<select name="item" class="form-control select2" id ="item">
    <option value="0" selected="true" disabled="true">Select Item</option>
     @foreach($items as $key => $i)
        <option value="{!!$key!!}">{!!$i!!}</option>
     @endforeach
</select>

项目控制器

public function itemList()
{
  $items = Item::lists('name', 'id');
  return view('employee.itemList', compact('items'));
}
public function storeItem(Request $request){
    $info = array( 'item_name'=>$i,
      'item_id'=>$request['item'],
    DB::table('itemOrder')->insert($info);
  return redirect()->route('dashboard');
}

路线

Route::get('itemList', ['as' => 'itemList',
        'uses' => 'ItemController@itemLIst']);
Route::post('storeItem', ['as' => 'storeItem',
        'uses' => 'ItemController@storeItem']);

JS

$('select[name="item"]').on('change', function () {
 var e = document.getElementById("item");
 var itemText = e.options[e.selectedIndex].text;
 console.log(itemText);
});

我可以将 item_id 值存储在我的数据库中,因为我同时将 item_name 设置为可为空。我试图通过 javascript 获取文本,并且可以使用 console.log 显示它。任何人都可以帮助我存储选定的文本吗?或者有没有办法通过javascript或jquery获取文本?

【问题讨论】:

  • "或者有没有办法通过javascript或者jquery获取文本" 你已经通过javascript获取了文本,即itemText。如果您需要保存它,只需将其与您用于将其他信息发送到服务器的任何方法一起发送即可。
  • 感谢您的回复,我对 javascript 很陌生,所以我不知道如何在方法中发送文本。我可以毫无困难地检索该值,因为我只需请求选择框的名称,它将存储该值。但是文本与值具有相同的选择框,因此请求它只会让我得到值而不是文本,我对如何获取文本感到很迷茫。
  • “我很迷茫如何获取文本”你已经在 itemText 中找到了文本,正如你所说 “我可以用控制台.log”。所以做任何你需要做的事情。你实际上需要用它做什么?您所说的只是“存储它” 将它存储在哪里?在javascript的其他部分可以使用的变量中?将其传递给其他函数?
  • 将它存储到表 itemOrder 中,我有 ItemController 和 storeItem 函数,该函数通过请求名称为“item”的选择框的值来存储 item_id。如果可能的话,我只需要知道如何将文本从刀片视图获取到控制器。我可以显示 itemText,但我不知道在哪里传递它,所以我可以将它用于我的 storeItem 函数。也许我发现的是你所说的“在javascript的其他部分可以使用的变量中”
  • 您的 itemController 在服务器上,所以正如我在第一条评论中所说,您需要“将它与您用于将其他信息发送到服务器的任何方法一起发送” i> 这里的方法是指表单发布、Ajax 请求,以及您可能用来保存其余数据的任何内容。任何答案都需要知道该信息。虽然我必须问,如果 itemOrder 表中的item_name 与您的 Item 表中的name 相同,您为什么要在这两个地方都保存它?那是数据重复,当从 itemOrder 中选择时,您可能应该只对 item 表进行 MYSQL JOIN。

标签: javascript jquery html mysql laravel


【解决方案1】:

你试过用吗

"<option value=" 

保存每个选项的文本?这样您就可以检索选定的选项文本而不是一些数字代码。

【讨论】:

  • 感谢您的回复,选项值为 $key,它是项目的 item_id,这是我将 item_id 传递到我的数据库的地方。 $m 是项目的文本,但我不知道如何将该值存储到我的数据库中。
  • 你能打印 $items 数组吗?你可以这样写 @foreach($items as $key => $i) @endforeach
【解决方案2】:

按照我的代码。

$(document).ready(function () 
{
  $('select[name="item"]').on('change', function () 
  {
  alert('Value change to ' +$(this).attr('value')+$(this).text());
   });
 });

【讨论】:

  • 感谢您的回复,我尝试了您的代码,提示“值已更改为未定义”,并在其下方列出了所有项目名称。
  • 因为您的选项值不是创建所以它显示未定义
  • 我不确定我是否关注你,但我的选择框的值不是我的 foreach 中的变量 $items 吗?还是我做错了?
猜你喜欢
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 2019-10-21
  • 2016-01-10
  • 1970-01-01
  • 2016-05-17
相关资源
最近更新 更多