Ajax 从文本_字段获取值而不提交?

Ajax 从文本_字段获取值而不提交?,ajax,ruby-1.8.7,Ajax,Ruby 1.8.7,我需要的是—某种方式来获取表单中输入的数字,以便在更新之前对照以前的记录进行检查,以便在出现验证错误时,可以提示用户在提交表单之前进行确认。Params可以工作,但是只有在表单发布后才会返回,因此没有帮助。是否有一个ajax调用可以传递到ruby变量中?或者可能是某种ruby代码,可以读取文本框中的输入,而无需提交或链接 我正在做的-我正在尝试设置“手动验证”,因为我不希望验证“阻止”保存。相反,它应该更像是一种确认 如果你关心上下文的话,下面是详细情况——我有一个客户每月支付押金。我们通过第三

我需要的是—某种方式来获取表单中输入的数字,以便在更新之前对照以前的记录进行检查,以便在出现验证错误时,可以提示用户在提交表单之前进行确认。Params可以工作,但是只有在表单发布后才会返回,因此没有帮助。是否有一个ajax调用可以传递到ruby变量中?或者可能是某种ruby代码,可以读取文本框中的输入,而无需提交或链接

我正在做的-我正在尝试设置“手动验证”,因为我不希望验证“阻止”保存。相反,它应该更像是一种确认

如果你关心上下文的话,下面是详细情况——我有一个客户每月支付押金。我们通过第三方通过电话确认这些存款。当然,为了获得尽可能准确的数据,我们必须考虑人为错误和其他因素。这个月的存款不应该少于上个月的存款——但存款可以从一个账户“转移”到另一个账户,这会让人觉得存款少了。我有一个新数据输入的表单,我希望它与以前的记录进行核对,以查看存款是否比以前报告的多或少。如果更少,它应该要求确认-一个“你确定吗?”之类的东西

代码是旧的和过时的,应该从头开始更改,但当我有几天的时间做这件事时,需要几个月的时间。我只是在找补丁

到目前为止,我所拥有的——请注意,cur_存款是这个月,rec_存款是最后一个月

<%
arr1 = []
arr2 = []
is_less = false

r = @recent_inquiries.last
r.inquiry_deposits.order(:id).each do |t|
  arr1 << t.cur_deposit.to_f
  arr1 << t.rec_deposit.to_f
end
@inquiry.inquiry_deposits.order(:id).each do |td|
    #============THIS is the part that needs help
    arr2 << params["cur_deposit_text_box"]
    arr2 << params["rec_deposit_text_box"]
end
i = 0
while i < (arr1.size - 1)
  comp_arr1 = []
  comp_arr2 = []
  comp_arr1 << arr1[i]
  comp_arr1 << arr1[i + 1]
  comp_arr2 << arr2[i]
  comp_arr2 << arr2[i + 1]
  if Inquiry.compare_deposits(comp_arr1, comp_arr2) != nil then is_less = true end
  i = i + 2
end

if is_less
  strConf = "A deposit from last month is greater than the same deposit this month, which should not happen.  Are you sure?"
end
%>
<%= submit_tag "Save Inquiry", :onclick=>"$('#submit_form').val('Save Inquiry summary');", :class => 'tgButton3', :id => 'save_inquiry_button_bottom', :confirm => strConf %>

您可以在您的网站上使用jQuery吗?(如果不是,则在纯javascript中是可行的)


谷歌“组合框示例”可能会对您有所帮助。

为了解决这个问题,如果其他人想知道,我将回答自己的问题。这就是我发现的

由于客户机和服务器之间关系的性质,实际上无法获取文本输入的值,将其存储在ruby变量中,然后对照另一个ruby变量进行检查。Ruby脚本只运行一次,然后进行渲染,因此虽然ajax可能能够在后台持续运行并收集输入等,但在讨论仅客户端交互时,与Ruby的集成还不够。(如果我错了,请纠正我——毕竟,我发布这个问题是为了征求大家的意见!)

修复方法:我使用隐藏标签创建了一个开关。加载表单时,隐藏标记为空。提交表单后,更新操作将根据上个月的数字检查新输入数据的参数。如果条件符合,则会保存。如果没有,它将用消息重新加载页面。如果消息被确认,ajax命令会将隐藏标记更改为“true”,一旦再次点击更新操作,就会绕过比较。否则,将不保存数据。问题解决了


我将此作为一个社区维基答案,以防有人想添加他们的两分钱。

我可以使用jQuery。我不知道如何实现这一点-您的函数是在视图中调用javascript函数,还是在控制器/模型中调用动作?这是怎么回事?通常我不会使用很多javascript等,但我猜客户端逻辑不能用Ruby编写?我猜这个答案留给我的问题比以前多得多!我喜欢你的方法,但看起来我们谈论的是两件不同的事情。我希望在不向服务器发送任何数据的情况下,在客户端执行所有验证。不过,我认为这是不可能的。如果你确定你需要什么,你可以在第一次请求页面时发送所有客户端数据,而不是从客户端内部使用。除非您是一个向导,否则客户端实际上无法在不发出请求的情况下从服务器提取数据。这就是为什么我说我们讨论的是两件不同的事情。我没有说我想从服务器上获取数据,但可能我不太清楚我想做什么。我想要的是在数据提交到服务器之前,在视图中获取刚刚在客户端键入的数据。我想获取数据并使用Ajax将其存储在ruby变量中;类似于
onchange=
,或者类似的东西,但如果我正确理解了过程,这是不可能的。我知道你的意思,但这是不可能的。客户机发出请求,而服务器提供请求,但它不能以相反的方式工作。
$('#id-of-your-field').change(function(e){
 //do here your client side logic if any needed
 var yourfirstvalue = $(e.target).val();
 //now take the value and send it to server (your ruby stuff)
 $.ajax({
   url: yourURL + "/" + yourfirstvalue,
   success: function(data){
      //this data can be sent as JSON in structure which suits the best to you
      //so you can use it to populate your second dropdown
      var values = JSON.parse(data);
      //use your values
   }
 });
});