-2

我有一个用 php 创建的包含许多选择的表单。该表格有 3 种选择:第二种选择取决于第一种选择,第三种选择取决于第二种选择。每个 select 都有一个像这样的 id:type[00], type [01], type[02]; 制造[00],制造[01],制造[02];型号[00]、型号[01]、型号[02] ...

我使用这个脚本。我试图编辑代码以满足我的需要,但我对 java 或 jquery 一无所知。我认为问题出在函数 finishAjax 上,因为我不知道怎么说任何选择的 id 都不同。

$(document).ready(function() {

        $('select[id^="type"]').change(function(){

            $('select[id^="make"').fadeOut();

            $.post("ajax/ajax_make.php", {
                type: $('select[id^="type"]').val()
            }, function(response){
                setTimeout("finishAjax('make', '"+escape(response)+"')", 400);
            });
            return false;
        });

        $('select[id^="make"').change(function(){

            $('select[id^="model"').fadeOut();

            $.post("ajax/ajax_model.php", {
                type: $('select[id^="type"]').val(),
                make: $('select[id^="make"').val()
            }, function(response){
                setTimeout("finishAjax('model', '"+escape(response)+"')", 400);
            });
            return false;
        });

        });

        function finishAjax(id, response){

         $('select[id^="'+id+'"]').html(unescape(response));
         $('select[id^="'+id+'"]').fadeIn();
        }
4

1 回答 1

0
<select name="type_0" data-id="0" class="type">
  <option value="1">a</option>
  <option value="2">b</option>
  <option value="3">c</option>
</select>

<select name="type_1" data-id="1" class="type">
  <option value="1">a</option>
  <option value="2">b</option>
  <option value="3">c</option>
</select>

<select name="make_0" data-id="0" class="make">
  <option value="1">a</option>
  <option value="2">b</option>
  <option value="3">c</option>
</select>

<select name="make_1" data-id="1" class="make">
  <option value="1">a</option>
  <option value="2">b</option>
  <option value="3">c</option>
</select>


<script type="text/javascript">
  $(document).ready(function() {

    /** Execute an ajax request **/
    function dispatchRequest(url, data, timeout) 
    {
      setTimeout(function() {
        $.ajax({
          type    : "POST",
          url     : url,
          data    : data,
          success : finishAjax,
          type    : "JSON"
        });
      }, timeout);
    };

    /** Finish AJAX request **/
    function finishAjax(response)
    {
      /** IMPORTANT 

        response is now a JSON object, this is just a simple string
        that represents a complex object. I this case, it is up to the
        target URL (ajax/ajax_make.php) to create this string by using 
        the provided data (id,type)

        At a minimum we need three values:

        response.HTML = HTML of the select options
        response.id   = The identity of the select item
        response.type = The type of select option

      **/

      $("select[name=" + response.type + "_" + response.id)
        .html(unescape(response.html))
        .fadeIn();
    }

    /** Find ALL the selects of each type, hence class selector **/
    $selectType = $(".type");
    $selectMake = $(".make");

    /** 
      Change event for "type" select option 
    **/
    $selectType.on("change", function(){
      var id  = $(this).data("id");

      /** Hide all "make" select options **/
      $selectMake.each(function(){
        $(this).fadeOut();
      });

      dispatchRequest("ajax/ajax_make.php", {
        id   : $(this).data("id"),
        type : $(this).attr("class")
      }, 1000);

      return true;
    });


  });
</script>

重要的变化是响应是一个 JSON 对象,包含多个键值对 - 其中之一是您需要的“id”。

注意:这是未经测试的午餐时间代码。当我有机会时,我会测试并给出更好的解释。与此同时,希望代码能给你一些洞察力..

于 2013-03-19T14:28:03.470 回答