行为或输入字段值不一致

时间:2013-04-02 19:11:56

标签: jquery html forms input bpopup

我在一个模态窗口中有一个表单,带有一些自定义验证,我将表单数据序列化 在按钮.click和表单操作是javascript:void(),现在我有一个可选的输入字段

<input type="text" name="property_id" id="pid" value='' class="optional"/>

我选择用

序列化它
var values = $(form).find('input[value!=""]').serialize();

现在,当我在表单中输入时,pid字段的value属性没有得到更新 并且没有得到提交。因此我在chrome js控制台中尝试运行

$("#pid").val()

它给了我输入的任何东西,但是

$("#pid").attr('value')

给了我“”

这是什么行为的原因?我是ajax加载此表单。 编辑: 我正在使用bpopup jquery插件在加载文档后在模态窗口上加载表单。 这是它在一个不同的html文件中的形式,它是一个使用bpopup作为弹出窗口加载的ajax,脚本链接在这个文件中。

<form class="form-horizontal" id="vmuform" action="javascript:void(0);">

整个代码太长了,无法在此处发布

$(function(){
$("#vmusubmit").click(function(){
var uname=
var pass= 
var base = 
var form = $(this).parents('form:first');
console.log(form.attr('id'))
if(form.attr('id') === 
var path=
if(form.attr('id') === 
var path="
if(form.attr('id') === 
var path="

var values = $(form).find('input[value!=""]').serialize();
console.log(values);
$.ajax( {crossDomain: true,
       username:uname,
       password: pass,
       type: "POST",
       url: base+path,
       data: values,
       dataType:"xml",
       success: function( response ) {
           console.log( response );
           var stat=$(response).find('rsp').attr('stat');
           if(stat ==='ok'){
               $('#mod-alert').html("Data successfully added.").addClass("alert-success").removeClass("alert-error").show();
           }
           else
               {
                   $('#mod-alert').html($(response).find('message')).addClass("alert-error").removeClass("alert-success").show();
               }
       }
} );
});

})

1 个答案:

答案 0 :(得分:1)

由于.val() and .attr('value')并不完全相同。

.attr(..)仅在创建html时返回对象值(即原始值)。

.val()获取对象的属性值,该值可以多次更改。

即使您输入内容而未提交值的原因,只有在我们看到更多代码时才能解释。但是,序列化表单并消除所有空值的最佳方法是克隆它。

$(form).clone().find('input:text[value=""]').remove().end().serialize();