jquery обновляет несколько полей

#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.