使用 jquery 和 laravel 填充多个选择框

Posted

技术标签:

【中文标题】使用 jquery 和 laravel 填充多个选择框【英文标题】:Populate multiple select box with jquery and laravel 【发布时间】:2014-05-24 00:31:33 【问题描述】:

我正在使用 laravel,我需要根据用户从数据库中选择的内容填充多项选择。 我有 2 个选择框,一个选择类别,然后一旦我选择了类别,第二个选择框就会填充产品。 一旦第二个选择填充了产品,我需要从数据库中获取该产品的所有描述并以表格形式显示,以便对其进行修改。

我做了一个路线:

 Route::get('api/dropdown', function()
            $input =Input::get('option');

                $prodotti= DB::table('prod')                
                    ->join('cat','cat.id_prod','=','prod.id')
                    ->where('cat.id','=',$input)
                    ->select('prod.id as idprod','prod.nome as nomeprod')
                    ->lists('nomeprod','idprod');


            return Response::json($prodotti);
            );

这应该会发送响应

 Form::open(array('url' => 'admin/create/mod', 'files'=> true)) 
        <span>
         Form::select('categorie',  $categorie,'default', array('id'=> 'a')) 
            <br/>

         Form::select('a',array('a'=> 'scegli'),'default', array('id'=> 'b')) 

        Scegli il nome del prodotto

        Form::text('nome')
        <br/>
        Form::label('*Descrizione in Italiano')
        <br/>
        Form::textarea('descrizioneit','',array('id'=>'descrizioneit'))
        Form::textarea('descrizioneit','',array('id'=>'previewit', 'readonly'=>'readonly', 'onfocus'=>'this.blur();'))
        <br/>
        Form::label('*Descrizione in Inglese')
        <br/>
        Form::textarea('descrizioneen','',array('id'=>'descrizioneen'))
        Form::textarea('descrizioneen','',array('id'=>'previewen', 'readonly'=>'readonly', 'onfocus'=>'this.blur();'))
        <br/>

Form::close()

这是我的 javascript

jQuery(document).ready(function($)
    $('#a').change(function()
            $.get(" URL::to('api/dropdown')", 
                 option: $(this).val() , 
                function(data) 
                    var model = $('#b');
                    model.empty();

                    $.each(data, function(element) 
                        model.html(element);
                    );
                );
        );
    );

那我应该做另一个 api 来用我选择的产品描述填充文本框吗?

我会遵循这个想法,但即使是第一部分也行不通。 看来我的javascript代码被忽略了。

【问题讨论】:

第一部分是指路线吗?我相信您应该返回 json,因此请尝试 return Response::json($prodotti); 并在浏览器中转到该路线。您应该会在屏幕上看到一些文字。 是的,我看到了,可能错误在 javascript 中,我不能很好地使用 jquery。我已经添加了 Json 并且我查询 api/dropdown?option=1 并且我从数据库中得到了正确的响应 好的,所以我要做的是确保您的事件处理程序正常工作。尝试在$('#a').change(function() 之后添加alert('working');,它应该在每次更改时发出警报,以确保它正常工作。 是的,是的,我已经这样做了,我得到了正确的警报,其中选项的值被选择了 可能我以错误的方式访问 jquery 中的数据 【参考方案1】:

好的,试着阅读和分析这篇文章,它更像你要找的东西

<?php
   require_once('func.inc.php'); //Connection script remember
   connect();
    ?>
   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>testDroplistdown</title>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  </head>

  <body>
  <p align="center">
  <div id="dropdown1div"><select id="dropdown1" name="dropdown">
  <?php countryQuery(); ?>
  </select></div>
  </p>
  <br />
  <br />

  <p align="center">
  <div id="dropdown2div"></div>
  </p>

  <p align="left">
  <div id="dropdown3div"></div>

    <script type="text/javascript">
    $("#dropdown").change(function() 
    val = $(this).val();
    var html = $.ajax(
    url: "dropdown_select.php?dropdown=2&val="+val+"",
    async: true,
    success: function(data) 
    $('#dropdown2div').html(data);
    ////////////function html////////
    )/////////function ajax//////////
     );
    </script>

   <?php close(); ?>
   </p>


   </body>
   </html>

dropdown_select.php

 <?php
   require_once('func.inc.php');
   connect();
    if(isset($_GET['val']))   
    $val = $_GET['val'];
    $dropdown = $_GET['dropdown'];
    


    if($dropdown == '2')
    echo '<select id="dropdown2" name="dropdown2">';
    governorateQuery();
    echo '</select>';
    ?>
     <script type="text/javascript">
     $("#dropdown2").change(function() 
     val = $(this).val();
     var html = $.ajax(
     url: "dropdown_select.php?dropdown=3&val="+val+"",
     async: true,
     success: function(data) 
     $('#dropdown3div').html(data);
     ////////////function html////////
     )/////////function ajax//////////
     );
    </script>

       // end if statement



    if($dropdown == '3')
     echo '<select id="dropdown3" name="dropdown3">';
     specializationQuery();       
     echo '</select>';
        // end if statement
  close();
  ?>

【讨论】:

【参考方案2】:

问题在于您如何填写您的选择。

jQuery(document).ready(function($)
    $('#a').change(function()
        $.get(" URL::to('api/dropdown')", 
             option: $(this).val() , 
            function(data) 
                var model = $('#b');
                model.empty();

                $.each(data, function(index, value)      
                     model.append($("<option />").val(index).text(value)); );
                );
          );
    );
);

【讨论】:

实际上我用 $.each(data, function(index, value) model.append($("").val(index).text(value)); );因为我是从一个列表中填充的,但是你的回答让我走上了正确的道路

以上是关于使用 jquery 和 laravel 填充多个选择框的主要内容,如果未能解决你的问题,请参考以下文章

使用 JQUERY 和 AJAX 在 Laravel 分页中重新填充表数据

Laravel 5.2 如何使用多选填充编辑表单?

添加多个字段时,HTML多选下拉菜单Jquery和样式不起作用

使用来自数据库 Laravel Blade 的数据填充单选按钮

jQuery多选下拉复选框在选项文本后填充

使用 jQuery、PHP 和 MySQL 为单选按钮加载 JSON 数据