如何添加一组子onclick事件

时间:2017-08-19 11:05:24

标签: javascript jquery html

我为预订航班编写了以下代码,效果很好。 我的问题是我无法在点击事件上添加一个组.button-点击一个。当我点击加号时,我想用class new添加div。 但它无法正常工作并重复我最终需要它的另一个选择框。 我怎么能用class重复div:new onclick event?

这是我的片段:



$(function() {

  // Function to create child dropdown
  var createChildDropdown = function(i) {
  
    // Create a div in the following format:
    // <div class="childs">
    //    <label for="...">Child (number)</label>
    //    <select id="..."></select>
    // </div>
    var $childDropdown = $('<div />', {
      'class': 'childs'
    });
    $childDropdown.append($('<label />', {
      'for': 'childDropdown-' + i
    }).text('Child ' + i));
    $childDropdown.append($('<select />', {
      'id': 'childDropdown-' + i
    }));
    
    // Define options made available for each child
    var options = ['a', 'b', 'c'];
    options.forEach(function(option, index) {
//-> added parameter name index here ^^^^^ 
      // Create new option element and append to <select>
      $childDropdown.find('select').append($('<option />')
             .text(option).attr('value', index));
//-> and using it here ...               ^^^^^
    });
    
    // Return documentFragment so that we can append it
    return $childDropdown;
  };
  
  // Function to destroy child dropdown
  var destroyChildDropdown = function($el, i) {
    $el.find('div.childs').get(i).remove();
  };

  $(".button-click a").on("click", function() {
    var button = $(this);
    var oldVal = parseInt(button.closest("ul").prev().val());
    var newVal = (button.text() == "+") ? oldVal + 1 : (oldVal > 0) ? oldVal - 1 : 0;
    var total_value = "";

    button.closest("ul").prev().val(newVal);

    $(".travel").each(function() {
      var cat = $(this).prev('span').text();
      total_value += cat + ": " + $(this).val() + ", ";
    });

    if (oldVal < newVal) {
      $('.childDropdowns').append(createChildDropdown(newVal));
    } else if (oldVal > newVal) {
      destroyChildDropdown($('.childDropdowns'), newVal);
    }

    total_value = total_value.substring(0, total_value.length - 2);
    $(".main").val(total_value);
  })
})
&#13;
.new{border:1px solid red;}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<label>
Count Room
<input type="text" name="no_travellers" class="main" value="Room:1, Adult:1" placeholder="" />
</label>
<br/>
<label>
   <span>Room</span>
   <input type="text" class="travel" id="CAT_Custom_410672" name="CAT_Custom_410672"  value="1" />
   <ul class="button-group button-click">
      <li><a href="#" class="small button secondary"><i class="fa fa-plus"><span class="hide">+</span></i></a></li>
      <li><a href="#" class="small button secondary"><i class="fa fa-minus"><span class="hide">-</span></i></a></li>
   </ul>
</label>

<div class="new">
<label>
   <span>Adult</span>
   <input type="text" class="travel" id="CAT_Custom_410672" name="CAT_Custom_410672"  value="0" />
   <ul class="button-group button-click">
      <li><a href="#" class="small button secondary"><i class="fa fa-plus"><span class="hide">+</span></i></a></li>
      <li><a href="#" class="small button secondary"><i class="fa fa-minus"><span class="hide">-</span></i></a></li>
   </ul>
</label>


<label>
   <span>Child</span>
   <input type="text" class="travel" id="CAT_Custom_410672" name="CAT_Custom_410672"  value="0" />
   <ul class="button-group button-click">
      <li><a href="#" class="small button secondary"><i class="fa fa-plus"><span class="hide">+</span></i></a></li>
      <li><a href="#" class="small button secondary"><i class="fa fa-minus"><span class="hide">-</span></i></a></li>
   </ul>
</label>
</div>



<div class="childDropdowns"></div>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:4)

在你的html中这样做为新div添加包装div

<label>
  Count Room
  <input type="text" name="no_travellers" class="main" value="Room:1, Adult:1" placeholder="" />
</label>
<br/>
<label>
  <span>Room</span>
  <input type="text" class="travel" id="CAT_Custom_410672" name="CAT_Custom_410672"  value="1" />
  <ul class="button-group button-click">
  <li><a href="#" class="small button secondary"><i class="fa fa-plus"><span class="hide">+</span></i></a></li>
  <li><a href="#" class="small button secondary"><i class="fa fa-minus"><span class="hide">-</span></i></a></li>
  </ul>
</label>
<div id="collectnew">
   <div class="new">
      <label>
        <span>Adult</span>
        <input type="text" class="travel" id="CAT_Custom_410672" name="CAT_Custom_410672"  value="0" />
        <ul class="button-group button-click">
            <li><a href="#" class="small button secondary"><i class="fa fa-plus"><span class="hide">+</span></i></a></li>
            <li><a href="#" class="small button secondary"><i class="fa fa-minus"><span class="hide">-</span></i></a></li>
        </ul>
    </label>


    <label>
        <span>Child</span>
        <input type="text" class="travel" id="CAT_Custom_410672" name="CAT_Custom_410672"  value="0" />
        <ul class="button-group button-click">
            <li><a href="#" class="small button secondary"><i class="fa fa-plus"><span class="hide">+</span></i></a></li>
            <li><a href="#" class="small button secondary"><i class="fa fa-minus"><span class="hide">-</span></i></a></li>
        </ul>
    </label>
  </div>
</div>



<div class="childDropdowns"></div>

和你的javascript。代码不管理,但我做的是我在变量中创建了一个必需的html并通过jquery

附加
$(function() {

  // Function to create child dropdown
  var createChildDropdown = function(i) {





// Create a div in the following format:
// <div class="childs">
//    <label for="...">Child (number)</label>
//    <select id="..."></select>
// </div>
var $childDropdown = $('<div />', {
  'class': 'childs'
});
$childDropdown.append($('<label />', {
  'for': 'childDropdown-' + i
}).text('Child ' + i));
$childDropdown.append($('<select />', {
  'id': 'childDropdown-' + i
}));

// Define options made available for each child
var options = ['a', 'b', 'c'];
options.forEach(function(option, index) {
//-> added parameter name index here ^^^^^ 
  // Create new option element and append to <select>
  $childDropdown.find('select').append($('<option />')
         .text(option).attr('value', index));
//-> and using it here ...               ^^^^^
});

// Return documentFragment so that we can append it
return $childDropdown;
};

 // Function to destroy child dropdown
var destroyChildDropdown = function($el, i) {
  $el.find('div.childs').get(i).remove();
};

$(".button-click a").on("click", function() {

  var html = '<div class="new">'+
                            '<label>'+
                        '<span>Adult</span>'+
                        '<input type="text" class="travel" id="CAT_Custom_410672" name="CAT_Custom_410672"  value="0" />'+
                        '<ul class="button-group button-click">'+
                    '<li><a href="#" class="small button secondary"><i class="fa fa-plus"><span class="hide">+</span></i></a></li>'+
                    '<li><a href="#" class="small button secondary"><i class="fa fa-minus"><span class="hide">-</span></i></a></li>'+
                        '</ul>'+
                            '</label>'+
                            '<label>'+
                        '<span>Child</span>'+
            '<input type="text" class="travel" id="CAT_Custom_410672" name="CAT_Custom_410672"  value="0" />'+
                        '<ul class="button-group button-click">'+
                    '<li><a href="#" class="small button secondary"><i class="fa fa-plus"><span class="hide">+</span></i></a></li>'+
                    '<li><a href="#" class="small button secondary"><i class="fa fa-minus"><span class="hide">-</span></i></a></li>'+
                        '</ul>'+
                            '</label>'+
                            '</div>';
$("#collectnew").append(html);


var button = $(this);
var oldVal = parseInt(button.closest("ul").prev().val());
var newVal = (button.text() == "+") ? oldVal + 1 : (oldVal > 0) ? oldVal - 1 : 0;
var total_value = "";

button.closest("ul").prev().val(newVal);

$(".travel").each(function() {
  var cat = $(this).prev('span').text();
  total_value += cat + ": " + $(this).val() + ", ";
});

if (oldVal < newVal) {
  $('.childDropdowns').append(createChildDropdown(newVal));
} else if (oldVal > newVal) {
  destroyChildDropdown($('.childDropdowns'), newVal);
}

total_value = total_value.substring(0, total_value.length - 2);
$(".main").val(total_value);
});

});

希望这适用于我的情况它有效并且不要忘记包含jquery文件。我发现它会在点击加号和减号按钮时添加,希望你能检查一下