2012-07-31 70 views
0

我有一个表单上的两个领域,都是当他们在页面加载时,具有相同的值的输入框,一个是隐藏的。jQuery的改变提交到服务器的方式

当用户点击提交时,我想检查框,如果值没有不同,我想将可见框的值设置为“”(空字符串)。

这里是我的代码(这是遍历一组输入,但基本是我所描述的)

$(".edit_functional_area").submit(function() {   
    $(".value_shown").each(function(i, obj) { 
     var hidden_obj = $(this).next(); 
     if (hidden_obj.val() == $(this).val() && $(this).val() != "") { 
      alert($(this).val()); 

      $(this).val(""); 

      alert($(this).val()); 
     } 
    }); 
}); 

从外观上看,该场实际上是在越来越削除,但在服务器上,在我的控制器(这是在rails应用程序中)params通过值仍然设置。

我想要的是,这个值在传入服务器的参数中是空白的,所以我的模型在数据库不需要时不会将值添加到数据库中。

有什么想法?

谢谢

+1

也许'返回false;'将停止提交发生;) – NewInTheBusiness 2012-07-31 02:22:17

+0

我怀疑事件处理程序中的数据更改没有达到发送到服务器的数据。用一个'click'处理程序替换提交处理程序来更改数据,然后在完成时触发'submit'事件呢? – andrewdotnich 2012-07-31 02:23:59

+0

http://stackoverflow.com/users/10569/andrewdotnich - 我试了一会儿,似乎它可能让我那里,但最终的解决方案更接近我的旧代码。谢谢你的手。 – 2012-07-31 18:55:20

回答

0

终于得到了这个工作。

删除了隐藏的字段,因为我创建它的方式导致了html中的ID冲突。 而是我在输入框中使用了一个数据attr来设置旧值,并使用它在jquery中进行比较。

也必须更改正在更改要使用attr(field,value)而不是val(value)进行更改的元素值的命令。

$(".edit_functional_area").submit(function(event) { 
    $(".value_shown").each(function(i, obj) { 
     var data = $(this).attr('data'); 
     if (parseFloat(data) == parseFloat($(this).val()) && $(this).val() != '') { 
      $(this).attr('value', ''); 
     } 
    }); 
}); 

感谢您的建议! 最大