Скрытое поле, возвращаемое php, установлено правильно, но не определено при получении значения с помощью jquery.
У меня есть файл javascript, публикующий данные в php-файлах, которые, как предполагается, получают данные из базы данных mysql, а затем заполняют поля указанными данными. Когда я вызываю функцию php для хранения имен полей в базе данных, она возвращает скрытое поле с количеством полей в таблице, которые хранятся в качестве значения для скрытого поля:
$i = 0;
$field_names = [];
while($i < mysql_num_fields($request)){
$field = mysql_fetch_field($request, $i);
$field_names[] = $field->name;
if(!$field){
die('something is wrong with the field var');
};
echo('<div class="fields" id="field_' . $i . '">' . $field->name . '<br /></div>');
$i++;
};
echo('<input type="hidden" value="' . $_POST['postselecttbl'] . '" id="hidden_tbl" />' .
'<input type="hidden" value="' . count($field_names) . '" id="num_fields" />');
$_SESSION['field_names'] = $field_names;
Кажется, все работает. Скрытое поле '#num_fields' устанавливается в зависимости от количества полей. Но когда я получаю val() из '#num_fields' с помощью jquery, он возвращает неопределенное значение до тех пор, пока вы снова не запустите функцию, а затем он получит значение, указанное в предыдущий раз, когда она была запущена.
$.post('php/get_flds.php', {postdbhost: dbhost, postdbuser: dbuser, postdbpass: dbpass, postselectdb: selectdb, postselecttbl: selecttbl},
function(d){
$('#display_out').html(d);
}
);
var num_flds = $('#num_fields').val();
alert('about to pop ' + num_flds);
for(var i = 0; i < num_flds; i++){
alert('populating ' + i);
pop_fld(i);
};
Правильно ли настроен скрытый вход? Я имею в виду, он показывает в HTML-коде, как установлен, но JQuery не сотрудничает.
2 ответа
Это скрытое поле вызывается из запроса AJAX? Если так, то попробуйте следующее:
$.post('php/get_flds.php', {postdbhost: dbhost, postdbuser: dbuser, postdbpass: dbpass, postselectdb: selectdb, postselecttbl: selecttbl},
function(d){
$('#display_out').html(d);
var num_flds = $('#num_fields').val();
alert('about to pop ' + num_flds);
for(var i = 0; i < num_flds; i++){
alert('populating ' + i);
pop_fld(i);
};
}
);
В противном случае jquery пока не знает значения, так как этого DOM еще нет в документе.
Думаю, пост - это асинхронный вызов. var num_fields устанавливается ДО завершения запроса на публикацию, и вы должны обновить его значение после завершения публикации. Попробуйте что-то вроде:
var num_flds = $('#num_fields').val();
$.post('php/get_flds.php', {postdbhost: dbhost, postdbuser: dbuser, postdbpass: dbpass, postselectdb: selectdb, postselecttbl: selecttbl},
function(d){
$('#display_out').html(d);
num_fields = $('#num_fields').val();
}
);
alert('about to pop ' + num_flds);
for(var i = 0; i < num_flds; i++){
alert('populating ' + i);
pop_fld(i);
};