jQuery .val()没有在提交时更新

时间:2009-12-08 11:54:45

标签: jquery webforms

我使用.val():

从jQuery访问的表单中获得以下值
var un0 = $("input.e0").val();
var un1 = $("input.e1").val();
var un2 = $("input.e2").val();
var un3 = $("textarea.e3").val();

来自元素的原始值之前已由不同的脚本添加,该脚本循环来自AJAX XML数据的值。

问题是,当我编辑表单中的值(即覆盖它们)并提交表单来更新我的数据库时,原始值,而不是更新值被发送。好像新的值被.val()忽略了。如果我使用警报(un0)测试从表单发布的内容;未检索新编辑的值,我可以看到正在使用原始文件。

请注意。对于正常工作的textarea(un3),情况并非如此,并且在编辑时使用新值进行更新。

为什么jQuery没有使用输入的新.val()?

使用更多来源编辑:

在从db调用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;
});

编辑后的表格中的值未更新,提交内容使用上述代码设置的原始值。

3 个答案:

答案 0 :(得分:1)

你可以这样做,以便在点击按钮后获取值:

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

答案 1 :(得分:1)

在firefox中打开firebug插件,并检查正在发送的AJAX请求。它实际上是在两个请求中传递相同的变量吗?在{em>每个地方后面alert('something unique')放置queryString变量的内容,然后在AJAX发布之前放置alert(queryString)

你要么没有达到你的条件,要么别的东西会覆盖它。 $.ajax()未被破坏=)

答案 2 :(得分: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>
";