#php #jquery #ajax #textbox
#php #jquery #ajax #текстовое поле
Вопрос:
что-то не так в коде? на самом деле это не обновление всего текстового ввода, а только обновление первого входного идентификатора = 1 после нажатия кнопки сохранить!
HTML-разметка:
<input type="text" id="1">
<input type="text" id="2">
<input type="text" id="3">
<input type="text" id="4">
<input type="text" id="5">
<input type="text" id="6">
JQUERY:
$('#save_affiliate').live('click',function() {
var $inputs = $('#affiliate_form');
$inputs.each(function(){
var counter = $(this).find("input[type=text]").length;
var af_value = $(this).find("input[type=text]").attr("value");
var af_id = $(this).find("input[type=text]").attr("id");
if(counter>0){
$.post("include/setting.php?affiliate",{id:af_id, text_value:af_value, count:counter}, function(data){
if(data.success) {
$('.err').html(data.message).fadeIn('slow');
} else {$('.err').html(data.message).fadeIn('slow');}
},"json");
}
});
return false;
});
PHP:
$counter = $_POST['count'];
$value = $_POST['text_value'];
$id = $_POST['id'];
$i = 0;
if ($counter != 0) :
while($i<$counter) :
$db->query("UPDATE affiliate SET d_percent='$value' WHERE id_affiliate='$id'");
endwhile;
$data["message"] = "Affiliate percentage value has been changed!";
$data['success'] = true;
endif;
Ответ №1:
Вы используете .each()
в своей форме, но вам нужно использовать его при вводе:
$('#save_affiliate').live('click', function() {
var $inputs = $('#affiliate_form').find("input[type=text]");
$inputs.each(function(i) {
var counter = $inputs.length;
var af_value = $(this).attr("value");
var af_id = $(this).attr("id");
$.post("include/setting.php?affiliate", {
id: af_id,
text_value: af_value,
count: counter
}, function(data) {
if (data.success) {
$('.err').html(data.message).fadeIn('slow');
} else {
$('.err').html(data.message).fadeIn('slow');
}
}, "json");
});
return false;
});
Вам также не нужно проверять наличие counter > 0
, потому что функция не будет запущена, если их нет input[type=text]
. Если вы подразумеваете, что ключ count является индексом входных данных, тогда используйте i
параметр, передаваемый каждой функции.
Ответ №2:
использовать
$(this).find("input[type=text]").each(function(index) {
//
});
для управления каждым захваченным элементом.
Ответ №3:
Как упоминалось в ответе Стефана, вам нужно использовать какой-то цикл для перебора каждого из имеющихся у вас входных элементов. Причина этого в том, что .attr()
метод возвращает атрибут для первого элемента в наборе элементов, для которых вы его вызываете. Поэтому, когда вы выполняете
var af_value = $(this).find("input[type=text]").attr("value");
var af_id = $(this).find("input[type=text]").attr("id");
вы извлекаете идентификатор и значения только для первого элемента ввода, которому соответствует ваш селектор; в вашем случае это тот, у которого id = 1.