2009-12-08 2 views
0
представить

я следующие значения из формы осуществляется доступом с помощью JQuery с помощью .val():JQuery .val() не обновляется на

var un0 = $("input.e0").val(); 
var un1 = $("input.e1").val(); 
var un2 = $("input.e2").val(); 
var un3 = $("textarea.e3").val(); 

исходных значений в тех из элементов, которые были добавлены ранее по другой скрипт, который циклически меняет значения из XML-данных AJAX.

Проблема заключается в том, что, когда я изменить значение в форме (т.е. переписать их) и отправить форму, чтобы обновить свою БД, то исходных значения, а не обновленных значений отправляются. Это как если бы новые значения игнорировались .val(). Если я проведу то, что отправляется из формы с предупреждением (un0); новое редактируемое значение не извлекается, и я вижу, что используется оригинал.

Примечание. Это не относится к правилу textarea (un3), который работает правильно и обновляет новое значение при редактировании.

Любые идеи, почему jQuery не использует новый .val() входов?

Edited с большим количеством источников:

Значения установлены в предыдущем блоке кода после вызова XML из БД. Это выполняется при нажатии элемента.

// Construct the output info (for both read and write) 
    for (var i = 0; i < field_count; i++){ 
     data = eval("r" + i); 
     $(".r"+i).replaceWith("<span class=\"r" + i + "\">" + data + "</span>"); 
     $(".e"+i).attr("value", data); 
} 

Затем отображается версия только для чтения. У этого была ссылка, которая отключает версию только для чтения и форму с теми же значениями в ней.

Затем на JQuery представить вызывает функцию перезаписи:

$(".overwrite").click(function() { 

// Other conditionals, then ... 

if (category=="3"){ 
    // phone 
    var un0 = $("input.e0").attr('value'); 
    var un1 = $("input.e1").attr('value'); 
    var un2 = $("input.e2").attr('value'); 
    var un3 = $("textarea.e3").val(); 

    // Encode each using myKey 
    e0 = Passpack.encode("AES",un0,myKey); 
    e1 = Passpack.encode("AES",un1,myKey); 
    e2 = Passpack.encode("AES",un2,myKey); 
    e3 = Passpack.encode("AES",un3,myKey); 

    queryString = 'user_id=' + user + '&cat_name=' + cat_name + '&id=' + item_no + '&v1='+ e0 + '&v2=' + e1 + '&v3=' + e2 + '&v4=' + e3; 

} 

// Other conditionals, then … 

// Call edit.php to make update on db 
    $.ajax({ 
    type: "POST", 
    url: "app/edit.php", 
    data: queryString, 
    success: function() {  
     $("#edit_" + cat_name).hide(); 
     $("#delete_success").hide(); 
     $("#right_read").show(); 
     $("#write_success").show(); 
     $("#read_" + cat_name).show(); 
     get_list(0,category); 
     read_db(category,item_no); 
    } 
    }); 
    time_out(); 
    return false; 
}); 

Значения в форме, после редактирования не обновляются и представление использует исходные значения, установленные выше кодом.

+1

В какой момент выполняется ввод кода, который вы вставляете? –

+0

Вы уверены, что обновляете переменные? Будет хорошо, если вы разместите полный источник, который используете. – kgiannakakis

+0

Переменные, e0, e1 и т. Д., Сначала устанавливаются, покупают другой блок кода. (Значения только для чтения также устанавливаются с использованием r0, r1 и т. Д.) Затем сценарий переключает версию данных только для чтения в форму, которая имеет эти значения в полях. (jQuery скрывает один и показывает другой.) Затем форма может быть обновлена ​​путем наложения. Существует ссылка для обновления, которая запускает функцию для обновления значений и отправки сценария PHP для обновления БД (также AJAX). Приведенный выше код является частью этой функции, которая вызывается при нажатии ссылки обновления. – Mark

ответ

1

Вы можете сделать это как-н, чтобы получить значения после нажатия кнопки:

$('submit').click(function() { 
    var un0 = $("input.e0").val(); 
    var un1 = $("input.e1").val(); 
    var un2 = $("input.e2").val(); 
    var un3 = $("textarea.e3").val(); 
}); 
+0

Это делается после нажатия кнопки «Отправить» (в моем случае «переписать»). – Mark

1

Открыть Firebug аддон в Firefox, и проверьте запрос AJAX, отправляемого. Действительно ли он передает одни и те же переменные в обоих запросах? Поместите alert('something unique') после в любое место, где вы назначаете что-то переменной queryString, а затем alert(queryString) перед сообщением AJAX.

Вы либо не используете свое состояние, либо что-то еще перезаписываете. $.ajax() не сломаны =)

+0

Спасибо за ваш комментарий. Firebug - это хорошо. (Я не уверен, как любой сайт с асинхронными вызовами мог бы быть построен без него). Я прошел относительно всеобъемлющий процесс отладки, прежде чем задать свой вопрос здесь. Все вызовы $ .AJAX и $ .post(), с которыми я работаю, насколько мне известно, работают нормально. Все вызовы возвращают правильный XML, и все сообщения возвращают SQL-ошибки и публикуют правильные данные (я уже отлаживал их!) На самом деле все файлы на стороне сервера выглядят нормально ... – Mark

+0

... У меня есть предупреждение (un0 + "\ n" + e0); который подтверждает, что данные, добавляемые к queryString, работают. Просто перезаписываемые данные не сбрасываются. Используются только предварительно заполненные данные, а .val() или .attr ('value') не будут обновлять его так, как я есть. Я фактически переключаюсь между категориями, и категория по умолчанию работает правильно (используя эти значения и .val()). Итак, мой текущий вывод заключается в том, что у меня есть какое-то неприятное дублирование, вызывающее проблемы где-то. – Mark

1

эй, я, возможно, опоздал на вечеринку, но я работал над этим же вопросом, и вот JS код, который работал для меня:

$('.matcher').each(function(){ 
    var idt = $(this).attr('rel'); 
    $(this).click(function(){ 
    var baseval=$('#base_'+idt).attr('value'); 
    $.post("t_softmatch_p.php", 
    { base: baseval, 
     iding: idt 
    }); 
    //alert(baseval + idt); 
    $(this).hide(); 
    })//end click   
    });//end each 

и здесь форма HTML, которую я имею, сбрасывая содержимое из БД в цикле,

echo "<form name=\"f_$iding\" id=\"f_$iding\" action=\"\" method=\"post\"> 
"; 
echo "".($m+1).") <input type=\"hidden\" name=\"iding\" id=\"iding\" value=\"$iding\"> 
"; 
echo "<input type=\"text\" name=\"ing_$iding\" id=\"ing_$iding\" value=\"$ingword\"> ==> 
"; 
echo "<input type=\"text\" name=\"base_$iding\" id=\"base_$iding\" value=\"$baseword\"> 
"; 

echo "<input type=\"button\" name=\"matcher\" id=\"matcher\" class=\"matcher\" title=\"matcher\" value=\"Make match\" rel=\"$iding\"> 
"; 
echo "</form><br> 
";