Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何允许对两个依赖的select字段执行独立的jquery操作?_Javascript_Jquery_Html_Json_Ajax - Fatal编程技术网

Javascript 如何允许对两个依赖的select字段执行独立的jquery操作?

Javascript 如何允许对两个依赖的select字段执行独立的jquery操作?,javascript,jquery,html,json,ajax,Javascript,Jquery,Html,Json,Ajax,我有两个选择城市,建筑是取决于用户选择的状态 <form method="post"> <div class="summary"> <div class="trip"> <select name="State" class="state"> <option selected disabled>Choose a State</option> <option>C

我有两个选择城市,建筑是取决于用户选择的状态

<form method="post">
  <div class="summary">
    <div class="trip">
      <select name="State" class="state">
        <option selected disabled>Choose a State</option>
        <option>California</option>
        <option>New York</option>
      </select>
      <select name="City" class="city" disabled="true">
        <option value="Z">Select a city</option>
      </select>
      <select name="Building" class="building" disabled="true">
        <option value="Z">Select a building</option>
      </select>
      <br><br>
    </div>
  </div>
城市和建筑是从ajax调用中提取json的

jQuery:

$(document).ready(function() {
  var additional = $('.trip').html();
  $('#result').hide();
  $('form').on("change", "select", function(){
    var current_index = $(this).index();

    if($(this).eq(current_index).val() == 'Z') {
      $('.city').eq(current_index).html("<option>Select a fare</option>");
      $('.city').eq(current_index).attr('disabled', true);
      $('.building').eq(current_index).html("<option>Select a fare</option>");
      $('.building').eq(current_index).attr('disabled', true);
    }
    else {
      var stateid = $(this).val();
      var current = $(this);
      $.getJSON('get_city/', {state_id: stateid}, function(data) {
        var options_city = '<option value="Z">Select a city</option>';
        for(var i=0; i<data.length; i++){
      options_city+='<option value="'+data[i].pk+'">'+data[i].fields['name']+'</option>';
    }
        current.siblings('.city').html(options_city);
        current.siblings('.city option:first').attr('selected', 'selected');
        current.siblings('.city').attr('disabled', false);
      });
      $.getJSON('get_building/', {state_id: stateid}, function(data) {        
        var options_building = '<option value="Z">Select a building</option>';
        for(var i=0; i<data.length; i++){
     options_building+='<option value="'+data[i].pk+'">'+data[i].fields['building']+</option>';
    }  
        current.siblings('.building').html(options_building);
        current.siblings('.building option:first').attr('selected', 'selected');
        current.siblings('.building').attr('disabled', false);
      });
    }
  });  
  $('#add').click(function() {
    if ($('.summary').children().length >= 4) return;
    $('.summary').append('<div class="trip">' + additional + "<div>");
  });
});
json AJAX for city的输出如下所示:

<option value="1">New York City</option>
<option value="2">Albany</option>
同样,对于建筑物:

<option value="1">Empire State Building</option>
<option value="2">Penn Station</option>
这里的问题是,当我选择一个城市时,“建筑选择”框将重置,所有选项都将消失。我知道这是因为两个getjson调用在同一个函数中。如何使城市和建筑的选择相互独立

JSFIDLE在这里没有那么有用,但我也包括了它


给你答案

$document.readyfunction{ var-additional=$'.trip'.html; $'result'。隐藏; $'form'.onchange,选择[name='State'],函数{ var current_index=$this.index; 如果$this.eqcurrent_index.val=='Z'{ $'.city'.eqcurrent_index.html选择票价; $'.city'.eqcurrent_index.attr'disabled',true; $'.building'.eqcurrent_index.html选择票价; $'.building'.eqcurrent_index.attr'disabled',true; } 否则{ var stateid=$this.val; 当前风险值=$this; 风险值数据=[{ 主键:1,, 姓名:“纽约” }, { 主键:2, 名称:“Test2” }]; //$.getJSON'get_city/',{state_id:stateid},functiondata{ var options_city='选择一个城市'; forvar i=0;i=4返回; $'.summary'。追加+附加+; }; }; 选择一个州 加利福尼亚 纽约 选择一个城市 选择一个建筑
再加一个trip@Shiladitya这是一个问题,谢谢分享…你能分享一些你从.getJSON收到的数据吗?我想问题出在$.getJSON上。$当你在函数中时,这不起作用。通常$this从0中获取一个索引值。当它在$.getJSON中时,索引值变为-1e next不起作用。这就是为什么我尝试使用兄弟元素。但这也解决不了问题。检查一下。这里我将选择元素的this设置为this并使用它。尝试一下,因为$.getJSON这会覆盖元素的this。这样做类似于我使用var current=$this所做的。所以我认为这是正确的。但是,我认为运行$.getjson在一行中,当我为city选择一个选项时,它也会为buildings运行getjson,这会重置第二个选择的值。我认为问题是连续运行太多getjson,不是吗?这里我用getjson创建了一个活动示例。看看。好的。我发现了这个问题。在我的原始代码中,当我选择一个状态时,选项f或者city和building正确显示。但是,一旦我为city value=3选择了一个值,stateid变量似乎被重写为3到1之间的另一个值。因此,$.getjson函数会得到一些奇怪的结果。你知道为什么吗?它不会破坏你的,因为你没有将变量传递到$.getjson中。