Javascript 在加载Rails部分时,我是否可以/如何绑定jQuery事件以形成元素加载?

Javascript 在加载Rails部分时,我是否可以/如何绑定jQuery事件以形成元素加载?,javascript,jquery,ruby-on-rails,ruby-on-rails-3,Javascript,Jquery,Ruby On Rails,Ruby On Rails 3,我想在加载带有特定类的表单元素(特别是隐藏字段)时调用函数。这: $('.has_other').ready(function(){ alert($(this).value); }); 在初始页面加载时工作正常,但当我使用“has_other”类重新加载包含元素的表单partial(用于使用相同表单编辑元素)时,不会再次调用该事件。在jQuery中是否有办法在隐藏字段的所有加载上调用此函数,包括在现有页面中重新加载/加载分区 提前谢谢 编辑:我在控制器中渲染部分,如下所示: page.

我想在加载带有特定类的表单元素(特别是隐藏字段)时调用函数。这:

$('.has_other').ready(function(){
    alert($(this).value);
});
在初始页面加载时工作正常,但当我使用“has_other”类重新加载包含元素的表单partial(用于使用相同表单编辑元素)时,不会再次调用该事件。在jQuery中是否有办法在隐藏字段的所有加载上调用此函数,包括在现有页面中重新加载/加载分区

提前谢谢

编辑:我在控制器中渲染部分,如下所示:

page.replace_html 'secondary_publication_entry', :partial => 'publications/form'
编辑2:以下是更具体的代码:

$j('.has_other_hidden').live('ready', function(){
    alert($j(this).value);
});
也尝试过

$j('.has_other_hidden').ready(function(){
    alert($j(this).value);
});

其中唯一引起警报的是.ready(),它不会在部分加载/重新加载时引起警报,这正是我希望发生的

我想当我重新加载每个部分时,我可以调用一个再次调用ready()的函数——但我不知道如何做到这一点(从rails控制器调用jquery函数)

谢谢你的回答


编辑3:我已经试过了live('load',…)和live('ready',…)。这两种方法都不适用:(

尝试查看jQuery库的live方法。我认为这会奏效

$('.has_other').live('load', function(){
    alert($(this).value);
});

如果这不起作用,请尝试在重新加载该部分的ajax请求后触发事件。

此字段是否隐藏?如果是$('.has_other'),则只返回可见的字段

$('.has_other:hidden')


应该获取隐藏元素。

这有点恶心,但是如果
live()
不起作用,您可以手动撤消并重做所有绑定。例如:

function bindMyStuff() {
  $('a').unbind('click');
  $('a').click(funciton() {
    alert("I've been clicked!");
  }
}

$(document).ready(function() {
  bindMyStuff();
});

然后,您可以在脚本标记内调用
bindystuff()

我应该提到我已经尝试过live()。不幸的是,即使最初加载主表单,也不会发生任何情况。live是您正在寻找的解决方案,您可以发布您正在寻找的代码吗。live?此外,您是否已完全删除prototype/添加了jQuery noConflict?请参阅我的更新-我在live()方面运气不佳在这种情况下。我认为live不能与“ready”/“load”一起工作?我不确定,但您是否尝试将代码放在partial中?每次新的partial Loads都应该调用它。我不确定如何从rails控制器调用jQuery函数,我在其中加载partial…帮助?不,不是从控制器,只需将js代码放在partial中即可我从未使用过prototype,但在jquery.get的情况下,您可以将您的js代码放在action.js.erb中,因此,如果您将代码放在partial中,并从控制器中呈现partial,代码将被执行,新对象(添加了partial)也将是updatedoh man。首先,当我刚刚定义bindMyStuff()函数时,我得到一个“handler is undefined”错误。不幸的是,当我尝试添加unbind And.load()而不是.click()时,bindMyStuff函数没有做任何事情。从我的分部调用外部函数可能是我需要的方向,谢谢你的想法!好的,我想我可以将live()与.load()一起使用,这样当加载原始类的另一个元素时(例如在分部中),就会调用该函数。@Sarah:你是否尝试解除绑定并重新绑定.ready()而不是.load()?.ready()做到了!所以我想我的答案是a)从部分加载调用函数,b)取消绑定并重新绑定.ready()。有点乱,但我会看看它是否能帮我找到我要去的地方。非常感谢@莎拉:还有一个想法。。。如果live()不能与ready()一起工作,那么它可能应该工作。考虑检查,看看这是否是jQuery中的一个已知bug,如果不是,请提交一个票证,使用您可以提供的示例的最简化版本。为开源做贡献!
function bindMyStuff() {
  $('a').unbind('click');
  $('a').click(funciton() {
    alert("I've been clicked!");
  }
}

$(document).ready(function() {
  bindMyStuff();
});