我使用.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;
});
编辑后的表格中的值未更新,提交内容使用上述代码设置的原始值。
答案 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)
$('.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>
";