gpt4 book ai didi

javascript - 如何访问foreach语句中的选择器?

转载 作者:行者123 更新时间:2023-12-03 02:31:00 25 4
gpt4 key购买 nike

我有两个 ajax 调用,当用户单击 jquery datepicker 上的日期时触发。

在第二个 ajax 调用中,我希望它将响应/数据填充到第一个 ajax 调用中的段落 tag class="spots" 中,以显示该特定时间的可用景点。

我的问题是第二个 ajax 调用仅填充并重复它找到的第一个结果。我认为这是因为我的类选择器在 foreach 行中是相同的。我已经设置了 id + item.id 以使它们动态化,但如何在 jquery 选择器中访问它们?任何帮助,将不胜感激。请参阅下面的代码。

$(document).ready(function() {

//show datpicker calendar set getDay function on select
$( "#datepicker" ).datepicker({
numberOfMonths: 1,
showButtonPanel: true,
onSelect: getDay,

});

function getDay() {

var date1 = $('#datepicker').datepicker('getDate');
var day = date1.getDay();

//set hidden input to numberical value of day
$('#dayOfWeek').val(day);
//set hidden textbox value near datepicker to submit date in proper format for db
$('#date').val($.datepicker.formatDate('yy-mm-dd', date1));



//ajax form the get available times to play
$.ajax({
url: $('#form').attr('action'),
type: 'POST',
data : $('#form').serialize(),
success: function(response){

//clear results before showing another date selected
$('.table').html("");

//loop through json results and build table
$.each(JSON.parse(response), function(i, item) {
var jdate = $('#date').val();
var id = item.id;


$('<tr>').html("<td>" + item.time + "</td><td>" + '<input type="text" name="jtime" value="' + item.time + '"' + "/>" + '<input type="text" name="jdate" value="' + jdate + '"' + ">" + "Spots:" + '<p class="spots" id="spots_' + id + '"'+ ">" + '</p>' + "</td>").appendTo('#availableTimes');

});//end loop

//fire getSpots function
getSpots();

}//end success
});
return false;

}; //end getDay function

// get available spots
function getSpots(){

var values = {
'jtime': $('input[name="jtime"]').val(),
'jdate': $('input[name="jdate"]').val(),
};

$.ajax({
//url: form.attr('action'),
url: '/reservations/getSpots',
type: 'POST',
// data : form.serialize(),
data : values,
success: function(response){

$('.spots').html(response);

}//end success


}); //end ajax
return false;

};//end getSpots function


})//end doc ready



</script>

这是一段有效的代码片段,但它使用带有按钮的表单来提交第二个 ajax 调用。我希望它像这样工作而无需按钮提交。希望在选择数据选择器日期时发布第二个 ajax 调用。也许我在想这个错误。

//show datpicker calendar set getDay function on select
$( "#datepicker" ).datepicker({
numberOfMonths: 1,
showButtonPanel: true,
onSelect: getDay
});


})//end doc ready
function getDay() {

var date1 = $('#datepicker').datepicker('getDate');
var day = date1.getDay();

//set hidden input to numberical value of day
$('#dayOfWeek').val(day);
//set hidden textbox value near datepicker to submit date in proper format for db
$('#date').val($.datepicker.formatDate('yy-mm-dd', date1));



//ajax form the get available times to play
$.ajax({
url: $('#form').attr('action'),
type: 'POST',
data : $('#form').serialize(),
success: function(response){

//clear results before showing another date selected
$('.table').html("");

//loop through json results and build table
$.each(JSON.parse(response), function(i, item) {
var jdate = $('#date').val();
var id = item.id;


$('<tr>').html("<td>" + item.time + "</td><td>" + '<form class="insideForm" action="/reservations/getSpots" accept-charset="utf-8" method="">' + '<input type="text" name="jtime" value="' + item.time + '"' + "/>" + '<input type="text" name="jdate" value="' + jdate + '"' + ">" + '<input type="submit" class="btn btn-primary" value="Spots">' + "Spots:" + '<p class="spots" id="spots_' + id + '"'+ ">" + '</p>' + '</form>' + "</td>").appendTo('#availableTimes');

});//end loop


getSpots();


}//end success
});
return false;


}; //end getDay function



// get available spots
function getSpots(){
//ajax form the get available spots


$('.insideForm').submit(function(){
var form = $(this).closest('form');

$.ajax({
url: form.attr('action'),
type: 'POST',
data : form.serialize(),

success: function(response){

$('.spots', form).html(response);

}//end success


}); //end ajax
return false;
}); //end submit

};//end getSpots function

最佳答案

您调用 getSpots 一次并期望所有内容都更新?您需要做的是为每一行调用一次 getSpots,并将 id 传递给 getSpots,以便 getSpots 可以使用正确的输入更新正确的行

请参阅标记为 //**** 的行以了解对代码的更改

A deleted answer had a better approach

function getDay() {
var date1 = $('#datepicker').datepicker('getDate');
var day = date1.getDay();
//set hidden input to numberical value of day
$('#dayOfWeek').val(day);
//set hidden textbox value near datepicker to submit date in proper format for db
$('#date').val($.datepicker.formatDate('yy-mm-dd', date1));
//ajax form the get available times to play
$.ajax({
url: $('#form').attr('action'),
type: 'POST',
data: $('#form').serialize(),
success: function (response) {
//clear results before showing another date selected
$('.table').html('');
//loop through json results and build table
$.each(JSON.parse(response), function (i, item) {
var jdate = $('#date').val();
var id = item.id;
$('<tr>').html('<td>' + item.time + '</td><td>' + '<input type="text" name="jtime" value="' + item.time + '"' + '/>' + '<input type="text" name="jdate" value="' + jdate + '"' + '>' + 'Spots:' + '<p class="spots" id="spots_' + id + '"' + '>' + '</p>' + '</td>').appendTo('#availableTimes');
// **** call getSpots for every row
getSpots('#spots_'+id, item.time, jdate);
}); //end loop
} //end success

});
return false;
} //end getDay function
// get available spots
// **** accept output id, jtime and jdate
function getSpots(id, jtime, jdate) {
// get the inputs for the current id
var values = {
'jtime': jtime,
'jdate': jdate,
};
$.ajax({
//url: form.attr('action'),
url: '/reservations/getSpots',
type: 'POST',
// data : form.serialize(),
data: values,
success: function (response) {
// **** update the spots for current id
$(id).html(response);
} //end success

}); //end ajax
return false;
} //end getSpots function

关于javascript - 如何访问foreach语句中的选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48737417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com