关于Rails 3.0.7和JQuery 1.5.1的问题
概述
我正在尝试做以下事情。我有一个网页,一面有一个表格,我可以创建一个类别,另一面有一个项目列表,每个项目都有一个复选框。我希望能够检查每个项目的复选框,这样当我提交表单来创建类别时,新创建的类别还会通过与每个项目的关联创建一个has_many。
因此,关联部分几乎可以工作,我可以提交已选中复选框的列表,如果我发送已检查项目列表,Rails会在后端创建关联。
问题:
这是不起作用的:
我试图通过Ajax提交表单,所以我想将一个事件句柄绑定到rails.js'ajax:beforeSend'事件,这样它就会扫描我选中的复选框列表和检查的ID一个隐藏的表格领域。
问题是:我尝试获取所有选中框的列表,并在用户单击“提交”按钮时将它们添加到隐藏字段。因此,我想我会在ajax:beforeSend事件处理程序中放置代码。我注意到的是,我注意到,rails.js已经以某种方式处理了表单字段,并在此处理程序触发之前构造了HTTP查询。我通过以下行为注意到这一点:
观察到的行为
1)我可以重新加载一个新页面,单击按钮提交表单,弹出我的处理程序中的警告框,说没有选中框,并且我的数据库中创建的类别没有关联的项目(正确的行为)
2)然后我单击1复选框,弹出警告框,显示选中哪些框(正确)。但是当我提交表单时,数据库中的类别仍然没有关联项。我可以通过firebug和服务器日志查看并发送包含旧参数列表的HTTP查询,而不是更新的参数列表。 (WRONG)
3)然后我再次提交相同的表格,不做任何改动,它显示了正确的项目数量。
所以我得到的结论是参数构造滞后。我希望这不会太久,有人可以帮我弄清楚发生了什么。
我的问题:
我需要绑定哪个事件,以便使用正确的参数提交表单?或者还有其他方法可以完全实现吗?
由于
以下是我的代码。
谢谢,
$('#my_form')
/* Now we need to configure the checkboxes to create an association between
* the items, and the interaction that is being created. First we will bind a
* function to the click event, and if the box is then checked, we will add
* the item id to the list of interaction items. If it is unchecked, we will
* remove the item from the list of interaction items.
*/
.live('ajax:beforeSend', function(event){
// First get a list of all the checked Items
var checked_items = new Array();
$('#items input[type="checkbox"]:checked').each(function(){
checked_items.push(this.getAttribute('data-item-id'));
});
// Then add this list of items to the new_interaction form to be submitted
$('#interaction_new_items').val(checked_items);
alert(checked_items);
alert($('#interaction_new_items').val());
})
答案 0 :(得分:2)
绑定到提交按钮本身的click事件。 click事件将在ajax beforeSend事件之前处理。
$('#my_form .submit').click(function() {
// rest of your code here
});
答案 1 :(得分:0)
更灵活的解决方案(例如,如果您希望使用点击之外的其他内容提交表单)将绑定到表单的提交事件。
$('#my_form').submit(function() {
// Tweak your form data here
})