我正在预订机票,并且有 2 个单选按钮。
1)一种方法
2) 往返
我所做的事情是,当我选择往返时,所有字段都在那里(出发、返回和乘客数量),但当我选择单程单选按钮时,返回字段应该隐藏。
在我的 Controller 中,我验证了所有字段都是必需的。问题是,每当我尝试以一种方式搜索(返回字段被隐藏)时,它都会给我一个“需要返回字段”错误
问题:当我选择“单向”单选按钮时,如何防止返回字段中的验证?
查看
<div class="pure-u-1-1 searchcontainer center">
<div class="pure-u-1-1 findcheaptxt">
<span>Find Cheap Flights</span>
</div>
<div class="pure-u-1-1 radiobtn">
<form action="">
<input type="radio" name="flight_type" value="one_way" class="onew" style="" >One Way
<input type="radio" name="flight_type" class="roundw" style="" checked>Round Trip
</form>
</div>
<form method="post" enctype="multipart/form-data" action="<?= base_url() .'User/search'?>">
<?= validation_errors(); ?>
<div class="pure-u-1-1 fromto">
<div class="pure-u-1-1">
<label for="from" class="margin2px">From</label>
<select name="flight_from">
<option value="">-- Please select depature --</option>
<?php foreach($countries as $country):?>
<option value ="<?= $country->country_name?>" ><?= $country->country_name?></option>
<?php endforeach?>
</select>
</div>
<div class="pure-u-1-1">
<label for="to" class="tomargin">To</label>
<!-- <input type="text" class="fromto"><br> -->
<select class="fromto" name="flight_to">
<option value="">-- Please select destination --</option>
<?php foreach($countries as $country):?>
<option value ="<?= $country->country_name?>" ><?= $country->country_name?></option>
<?php endforeach?>
</select>
</div>
<div class="pure-u-1-1 dr" name ="depart">
<label for="depart" class="drr">Depart</label>
<input type="date" id="depart" name="depart" class="departreturn">
</div>
<div class="pure-u-1-1 dr" id="try">
<label for="return" class="drr">Return</label>
<input type="date" id="return" name="return" class="departreturn"><br>
</div>
</div>
<div class="pure-u-1-1 personfield">
<!-- <div class="pure-u-1-5 margin">
Adult<br>
<input type="text" name="" class="person">
</div>
<div class="pure-u-1-5 margin">
Seniors<br>
<input type="text" name="" class="person">
</div>
<div class="pure-u-1-5 margin">
Children<br>
<input type="text" name="" class="person">
</div>
<div class="pure-u-1-5">
Class<br>
<input type="text" name="" class="person">
</div> -->
<div class="pure-u-1-5 margin">
Number of Passengers<br>
<input type="text" name="no_of_passengers" class="person">
</div>
</div>
<div class="pure-u-1-1 center">
<button class="submitbtn">Search Now</button>
</form>
</div>
</div>
</div>
Controller
public function search()
{
$data['countries'] = $this->CrudModel->get('countries');
$this->form_validation->set_error_delimiters('<div class="alert alert-danger" role="alert">', '</div>');
$this->form_validation->set_rules('flight_from', 'Select depature', 'required|trim');
$this->form_validation->set_rules('flight_to', 'Select Destination', 'required|trim');
if ($_POST['flight_type'] == 'round_trip')
{
$this->form_validation->set_rules('depart', 'Date of flight', 'required|trim');
$this->form_validation->set_rules('return', 'Date of return', 'required|trim');
$this->form_validation->set_rules('no_of_passengers', 'Number of Passengers', 'required');
if ($this->form_validation->run() == FALSE)
{
$this->index();
}
else
{
$search_result = array(
$flight_from = $_POST['flight_from'],
$flight_to = $_POST['flight_to'],
$depart = $_POST['depart'],
$return = $_POST['return'],
$no_of_passengers = $_POST['no_of_passengers']
);
$data['search_result'] = $this->CrudModel->search('flight',$flight_from,$flight_to,$depart,$return,$no_of_passengers);
$this->load->view('partials/header');
$this->load->view('partials/nav');
$this->load->view('result',$data);
}
}
else
{
$this->form_validation->set_rules('depart', 'Date of flight', 'required|trim');
$this->form_validation->set_rules('no_of_passengers', 'Number of Passengers', 'required');
if ($this->form_validation->run() == FALSE)
{
$this->index();
}
else {
$search_result = array(
$flight_from = $_POST['flight_from'],
$flight_to = $_POST['flight_to'],
$depart = $_POST['depart'],
$no_of_passengers = $_POST['no_of_passengers']
);
$data['search_result'] = $this->CrudModel->search('flight',$flight_from,$flight_to,$depart,$no_of_passengers);
$this->load->view('partials/header');
$this->load->view('partials/nav');
$this->load->view('result',$data);
}
}
}
隐藏返回字段时我的ajax/js
<script type="text/javascript">
$(document).on('change', 'input:radio[name=flight_type]', function(){
$('div[id^="try"]').toggle(); // hide all DIVs begining with "my_radio_"
$('#' + $(this).attr('id') + '_text').show(); // show the current one
});
</script>
最佳答案
首先,您必须为往返旅程增加值(value):
<input type="radio" name="flight_type" value="round_trip" class="roundw" style="" checked>Round Trip
然后执行如下验证条件:
// Global validation for this method
if ($_POST['flight_type'] == 'round_trip')
{
$this->form_validation->set_rules('depart', 'Date of flight', 'required|trim');
$this->form_validation->set_rules('return', 'Date of return', 'required|trim');
}
else if($_POST['flight_type'] == 'one_way'){
// add validation for one way trip
}
关于php - 当您有隐藏字段时阻止验证 Codeigniter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44449729/