I have two selects, the 1st filled by ouvrages and other by chantiers there is between them belongsTo relation, I want when I choose chantier in 1st select the 2nd filled by ouvrages corresponds, but in my case it gives me empty data.
mois.blade.php
//select chantiers
<select class="form-control" id="chantier_id">
<option selected disabled>Select Location</option>
#foreach($chantiers as $chantier)
<option value="{{ $chantier->id }}">{{ $chantier->chantier}}</option>
#endforeach
</select>
//select ouvrages
<select class="form-control" id="ouvrage_id">
<option value="0" selected disabled>- Select -</option>
</select>
jQuery
<script type="text/javascript">
$(document).ready(function() {
$('#example').DataTable();
});
$(document).ready(function(){
$("#chantier_id").change(function(){
var chantier = $(this).val();
$.ajax({
url: "{{ route('salarie.select') }}",
type: 'post',
data: {
chantier:chantier,
"_token": "{{ csrf_token() }}"
},
dataType: 'json',
success:function(response){
console.log(response);
var len = response.length;
$("#ouvrage_id").empty();
for( var i = 0; i<len; i++){
var id = response[i]['id'];
var ouvrage = response[i]['ouvrage'];
$("#ouvrage_id").append("<option value='"+id+"'>"+ouvrage+"</option>");
}
}
});
});
});
</script>
SalarieController.php
public function select(request $request){
$ouvrages = Ouvrage::where('chantier_id',$request->chantier_id);
return response()->json(['options'=>$ouvrages]);
}
web.php
Route::post('/select','SalarieController#select')->name('salarie.select');
Route::get('/mois','SalarieController#mois');
You need jQuery.parse(response) to parse json
and change loop to $.each to make it easy and less complex.
<script type="text/javascript">
$(document).ready(function() {
$('#example').DataTable();
$("#chantier_id").change(function(){
var chantier = $(this).val();
$.ajax({
url: "{{ route('salarie.select') }}",
type: 'post',
data: {
chantier:chantier,
"_token": "{{ csrf_token() }}"
},
dataType: 'json',
success:function(response){
console.log(jQuery.parse(response));
$("#ouvrage_id").empty();
$.each( jQuery.parse(response), function( key, value ) {
$("#ouvrage_id").append("<option value='"+key+"'>"+value+"</option>");
});
}
});
});
});
</script>
Related
I am trying to use bootstrap-select and laravel 7 to improve the style of one my projects but when the options of the select are built dynamically the plugin does not work and I do not find the error. I have included the $('.selectpicker').selectpicker('refresh'); as proposed by this answer but still I am not able to achieve what I want. The HTML is the following and works perfectly:
blade
<div class="col-md-6 mb-3">
<label for="state_id">State</label>
<select class="form-control selectpicker" id="state_id" name="state_id">
#foreach($states as $state)
<option value="{{ $state->id }}">{{ $state->name }}</option>
#endforeach
</select>
</div>
<div class="col-md-6 mb-3">
<label for="city_id">City</label>
<select class="form-control selectpicker" id="city_id" name="city_id">
</select>
</div>
script
<script>
$(document).on('change', '#state_id', function() {
$('.selectpicker').selectpicker('refresh');
let state_id = $(this).val();
let select = $('#city_id');
$.ajax({
type: 'get',
url: '{{ route('findIDState') }}',
data: {'id':state_id},
success: function(data){
select.html('');
for (var i = 0; i < data.length; i++){
select.append('<option value="'+data[i].id+'">'+data[i].name+'</option>');
}
},
error: function(){
console.log('this is a error');
},
}
Refresh select2 after appending
<script>
$(document).on('change', '#state_id', function() {
$('.selectpicker').selectpicker('refresh');
let state_id = $(this).val();
let select = $('#city_id');
$.ajax({
type: 'get',
url: '{{ route('findIDState') }}',
data: {'id':state_id},
success: function(data){
select.html('');
for (var i = 0; i < data.length; i++){
select.append('<option value="'+data[i].id+'">'+data[i].name+'</option>');
}
$('.selectpicker').selectpicker('refresh');
},
error: function(){
console.log('this is a error');
},
});
}).trigger('change');
</script>
I made 2 dependent dropdown in the same page.
One of them is inside foreach statement and it doesn't work at all. Meanwhile the other one works well. The name of id are totally different. Both of dependent dropdown lists refer to the same function in controller. I thought its the main problem and tried to make a different function, but it didn't change anything.
VIEW :
<tr>
<td><label>Category</label></td>
<td>
<div class="form-group">
<select id="edit_category" class="form-control" name="edit_category">
<option value="">Select Category</option>
<?php foreach ($categories as $cat) : ?>
<option <?php ?> value="<?php echo $cat->id; ?>"><?php echo $cat->name
</option>
<?php endforeach; ?>
</select>
</div>
</td>
</tr>
<tr>
<td><label>Product</label></td>
<td>
<div class="form-group">
<select name="edit_product" id="edit_product" class="form-control" style="width:350px">
<option value="">Select Product</option>
</select>
</div>
</td>
</tr>
SCRIPT :
<script type="text/javascript">
$(document).ready(function() {
//DEPENDENT DROPDOWN - ADD ITEM :
$('#add_category').on('change', function() {
$('#add_product').html('<option value="">Select Product</option>');
var catID = $(this).val();
$.ajax({
url: "<?php echo site_url('admin/item/dependentDL') ?>",
method: "POST",
data: {
id_p_category: catID
},
async: true,
dataType: "json",
success: function(data) {
$('#add_product').html(data);
},
error: function(error) {
alert(error);
}
});
return false;
}); //END - DROPDOWN - ADD ITEM
//DEPENDENT DROPDOWN - EDIT ITEM :
$('#edit_category').on('change', function() {
$('#edit_product').html('<option value="">Select Product</option>');
var edit_catID = $(this).val();
$.ajax({
url: "<?php echo site_url('admin/item/dependentDL') ?>",
method: "POST",
data: {
id_p_category: edit_catID
},
async: true,
dataType: "json",
success: function(data) {
$('#edit_product').html(data);
},
error: function(error) {
alert(error);
}
});
return false;
});
});
</script>
You should try with class instead of id because id is unique and your dropdown in the foreach loop so please try with class like below
$('.add_category').on('change', function() {
$('#add_product').html('<option value="">Select Product</option>');
var catID = $(this).val();
$.ajax({
url: "<?php echo site_url('admin/item/dependentDL') ?>",
method: "POST",
data: {
id_p_category: catID
},
async: true,
dataType: "json",
success: function(data) {
$('#add_product').html(data);
},
error: function(error) {
alert(error);
}
});
return false;
}); //END - DROPDOWN - ADD ITEM
//DEPENDENT DROPDOWN - EDIT ITEM :
$('.edit_category').on('change', function() {
$('#edit_product').html('<option value="">Select Product</option>');
var edit_catID = $(this).val();
$.ajax({
url: "<?php echo site_url('admin/item/dependentDL') ?>",
method: "POST",
data: {
id_p_category: edit_catID
},
async: true,
dataType: "json",
success: function(data) {
$('#edit_product').html(data);
},
error: function(error) {
alert(error);
}
});
return false;
});
i want to make a ajax call to controller when a value
is selected from select box.
this is my code:
<select class="form-control required" name="law_name" id="law_name">
#foreach($law_name as $lawname)
<option value="{{$lawname->id}}">{{$lawname->law_name}}
</option>
#endforeach
</select>
<script>
$("#law_name").on('change', function(){
alert('123');
$.ajax({
type: 'POST',
dataType: "json",
data: data,
url: "{{ URL::to('admin/SubLawController/index') }}",
success: function (response) {
}
});
});
</script>
my script is not running when i change value from select box
following is jquery code for making ajax call on change event of dropdown box,
$(function() {
$("#law_name").change(function () {
alert( $('option:selected', this).text() );
$.ajax({url: "http://xyz"+ $( this ).text(), success: function(result)
{
$("#div1").html(result);
}});
});
});
Code is in jquery , you have to use xmlhttprequest object for pain javascript.
I have scenario form like this
if option selected it will come out a new field i named "hah" i call it using ajax script like this
$('#bahan').change(function() {
var id = $('#bahan').val()
var datana = 'id=' + id
var urlna = "<?=base_url()?>controller/food/getdetailstok";
$.ajax({
type: 'POST',
url: urlna,
data: datana,
success: function(data) {
$('#hah').html(data);
}
})
return false;
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="form-group">
<select class="form-control select2" name="bahan" id="bahan">
<option value="">-- Choose One --</option>
<option value="1"> 1 </option>
<option value="2"> 2 </option>
</select>
</div>
<div id="hah"></div>
How to reset "hah" if i click button save. hah in reset because the value field options again become null
$('#hah').empty() will do the trick.
.empty() will remove every element from the DOM. In your case every element in your #hah div.
$('#bahan').change(function() {
$('#hah').html("");
var id = $('#bahan').val()
var datana = 'id=' + id
var urlna = "<?=base_url()?>controller/food/getdetailstok";
$.ajax({
type: 'POST',
url: urlna,
data: datana,
success: function(data) {
$('#hah').html(data);
}
})
return false;
})
I have a search form:
<form action="search.php" method="post" name="form" id="form" onsubmit="return false;">
<input name="search" type="text" id="search">
<input name="name" type="text" id="name">
<select name="car" id="car">
<option value="audi">AUDI</option>
<option value=bmw">BMW</option>
<option value="mini">MINI</option>
</select>
<select name="year" id="year">
<option value="2000">2000</option>
<option value="2005">2005</option>
<option value="2006">2006</option>
</select>
</form>
And search.php
<?php
$search = $_POST['search'];
$search = addslashes($search);
$search = htmlspecialchars($search);
$search = stripslashes($search);
$year = $_POST['option'];
$year = addslashes($year);
$year = htmlspecialchars($year);
$year = stripslashes($year);
if($search == '')
exit("Enter name");
elseif(!preg_match("/^[a-zа-я0-9]+$/ui", $search))
exit("Incorrectly");
include 'dbsetting.php';
$mysqli->set_charset("utf8");
$query = "SELECT * FROM cars WHERE (type LIKE '%".$search."%' OR name LIKE '%".$search."%' OR class LIKE '%".$search."%') AND year = '".$year."'";
Live search works. Using AJAX code:
$(function() {
$("#search").keyup(function(){
var search = $("#search").val();
$.ajax({
type: "POST",
url: "search.php",
data: {"search": search},
cache: false,
success: function(response){
$("#res").html(response);
}
});
return false;
});
});
input name="search" working correctly, but I can not add to search another select and more inputs. How to add to ajax code some inputs and select and how to save and add to search results in search.php?
I'm sorry for my English.
you can post your fields either name value pair format like:-
var search = $("#search").val();
var name = $("#name").val();
var car = $("#car").val();
var year = $("#year").val();
And user that query string while sending ajax request as data field.
data: {"search": search, "name":name, "car": car, "year":year},
Or you can use $( "form" ).serialize(); to convert all forms field automatically into name value pair like.
var my_data = $( "form" ).serialize();
// user that variable in your ajax call.
data: my_data,
Try this , use jquery bind
$('#search, #car, #year').bind( "keyup change", function() {
//put your ajax here
});
$(function() {
$("#search").keyup(function(){
var search = $("#search").val();
var name = $("#name").val();
var car = $("#car").val();
var year = $("#year").val();
$.ajax({
type: "POST",
url: "search.php",
data: {"search": search, "name":name, "car": car, "year":year},
cache: false,
success: function(response){
$("#res").html(response);
}
});
return false;
});
});
Try jquery .on() function
$(function() {
$("#search").on('keyup',function(){
var search = $("#search").val();
$.ajax({
type: "POST",
url: "search.php",
data: {"search": search},
cache: false,
success: function(response){
$("#res").html(response);
}
});
return false;
});
});