为什么选择不显示字段?

时间:2018-11-21 14:54:21

标签: javascript php jquery twitter-bootstrap-3 codeigniter-3

我试图先通过两种方式动态添加选择字段,然后为选择字段提供值。 同时进行动态尝试,使其运作良好。但是当试图通过显示某些选择字段时 给'1st room child'选择字段赋值,因此第一次是im接收输出,但是第二次是 不起作用

$(function () {
	/*here my values to increment whenever added newly form */
	var i = 1;
	i++;
	var max_fields = 6;
	var this_button_work_for_click_to_add_rooms = $(".this_button_work_for_click_to_add_rooms");
	var this_is_field_wrapper = $(".this_is_field_wrapper");


	//here we starting counting...
	var input_count = 1;
	//add buttong dynamically over here...
	$(this_button_work_for_click_to_add_rooms).click(function (event) {
		/* Act on the event */
		if (input_count < max_fields) {
			input_count++;
			var add_fields = '<div><div class="row"><div class="form-group"><div class="col-xs-1"><h6>Options -</h6><h6 class="#">Adults(12+)</h6><select id="selected_adults[]" name="selected_adults[]" class="form-control"><option   value="1">1</option><option selected="selected" value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option></select></div><!-- </div><div class="form-group"> --><div class="col-xs-1"><h6>' + input_count + ' Room</h6><h6 class="m_label">Child(0-12)</h6><select id="selected_childs[]" name="selected_childs[]" onchange="displayingNumberOfChildAge(this);" class="form-control"><option>select</option><option id="first_child_col"  value="1">1</option><option id="second_child_col"  value="2">2</option></select></div><!-- </div><div class="form-group"> --><div id="childage0" class="col-xs-1"><h6></h6></div><div id="childage1" class="col-xs-1"><h6></h6></div><a href="javascript:void(0);" class="remove_input_button" title="Remove field">remove</a></div><!-- here ending form group --></div><!-- here ending row --></div>';
			$(this_is_field_wrapper).append(add_fields);
		}
	});
	$(this_is_field_wrapper).on('click', '.remove_input_button', function (e) {
		e.preventDefault();
		$(this).parent('div').remove();
		input_count--;
	});
});
function addFields() {
	var number = document.getElementById("selected_childs[]").value;
	var childage = document.getElementById("childage0");

	//Create array of options to be added
	var array = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"];

	while (childage.hasChildNodes()) {
		childage.removeChild(childage.lastChild);
	}
	if (number == 1) {
		// statement
		for (i = 0; i < number; i++) {
			var h = document.createElement("h6");
			h.setAttribute("id", "firstever");
			var h1 = document.createElement("h6");
			h1.appendChild(document.createTextNode("select child age"));
			childage.appendChild(h1);

			h.appendChild(document.createTextNode("Children Age " + (i + 1)));
			childage.appendChild(h);

			var selectList = document.createElement("select");
			selectList.setAttribute("id", "mySelect");
			selectList.setAttribute("class", "form-control");
			childage.appendChild(selectList);
			childage.appendChild(document.createElement("br"));

			//Create and append the options
			for (var j = 0; j < array.length; j++) {
				var option = document.createElement("option");
				option.setAttribute("value", array[j]);
				option.text = array[j];
				selectList.appendChild(option);
			}
		}
	} else {
		// statement
		for (i = 0; i < number; i++) {
			childage = document.getElementById("childage" + i);
			var h1 = document.createElement("h6");
			h1.setAttribute("id", "secondever");
			h1.appendChild(document.createTextNode("select child age"));
			childage.appendChild(h1);
			var h = document.createElement("h6");
			h.appendChild(document.createTextNode("Children Age " + (i + 1)));
			childage.appendChild(h);

			var selectList = document.createElement("select");
			selectList.setAttribute("id", "mySelect");
			selectList.setAttribute("class", "form-control");
			childage.appendChild(selectList);
			childage.appendChild(document.createElement("br"));

			//Create and append the options
			for (var j = 0; j < array.length; j++) {
				var option = document.createElement("option");
				option.setAttribute("value", array[j]);
				option.text = array[j];
				selectList.appendChild(option);
			}
		}

	}
}
<!DOCTYPE html>
<html>
   <head>
      <title>Welcome|Home</title>
      <!-- Latest compiled and minified CSS -->
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
      <!-- jQuery library -->
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <!-- Latest compiled JavaScript -->
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
   </head>
   <body>
      <form method="POST" action="<?php echo base_url(); ?>index.php/dynamically_added_controller/Dynamically/addingValues">
         <div class="this_is_field_wrapper">
            <div class="row">
               <div class="form-group">
                  <div class="col-xs-1">
                     <h6>Options -</h6>
                     <h6 class="#">Adults(12+)</h6>
                     <select id="selected_adults[]" name="selected_adults[]" class="form-control">
                        <option   value="1">1</option>
                        <option selected="selected" value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                     </select>
                  </div>
                  <div class="col-xs-1">
                     <h6>1st Room</h6>
                     <h6 class="m_label">Child(0-12)</h6>
                     <select id="selected_childs[]" name="selected_childs[]" value="" onchange="addFields()" class="form-control">
                        <option>--select--</option>
                        <option value="1">1</option>
                        <option value="2">2</option>
                     </select>
                  </div>
                  <div id="childage0" class="col-xs-1">
                     <h6></h6>
                  </div>
                  <div id="childage1" class="col-xs-1">
                     <h6></h6>
                  </div>
                  <div class="col-xs-1">
                     <a href="javascript:void(0);" class="this_button_work_for_click_to_add_rooms" title="Add field">Click & Add Rooms</a>                     	
                  </div>
               </div>
            </div>
         </div>
         <button type="submit" value="submit">click to submit</button>
      </form>
   </body>
</html>

如您所见,问题在于,尝试通过为“第一个房间孩子”选择字段赋予值来尝试第二次显示选择字段,从而使其无法正常工作。

1 个答案:

答案 0 :(得分:0)

您的问题是所谓的“委托”。当您向DOM动态添加一些首次加载时不存在的内容时,您必须先浏览一下已存在的父项。

考虑一下。您已有一个元素:<div id="loaded"></div>

然后,您在该div中动态添加一些内容:<button type="button" id="someButton">

要收听该点击,您必须遍历父div,因为它是DOM的原始部分。

$('#loaded').on('click', '#someButton', function () {   
   //do something
});