jQuery:对通过Ajax返回的匹配元素执行函数

时间:2012-02-23 07:52:05

标签: ruby-on-rails-3 jquery-selectors jquery

这个jQuery选择器匹配一个新模型的Rails 3 HTML表单:$('form [id ^ =“new _”]')

我想在每次加载匹配表单时运行一个简单的焦点功能。有时,表单通过简单的GET加载,但也通过Ajax加载。在后一种情况下,返回的内容可以是HTML或转义JS。

我希望jQuery能够通过选择器,.on()和“load”事件来匹配所有情况,但我似乎无法在任何情况下使其工作。代码:

$(document).ready(function() {
    $('form[id^="new_"]').on("load", function(){
        console.log("Matched!")
    });
})

有什么想法吗?


谢谢大法官。我担心我无法让你的代码工作。我正在使用以下回调,如图所示在其外部定义新的自定义事件,我认为$('form')不会触发事件。

$('.shows-children').bind('ajax:success', function(evnt, data, status, xhr){
    var boxSelector = '#' + $(this).data("shows");
    $(boxSelector).html(xhr.responseText);
    $('form').trigger('customevent');
});

$(document).on('customevent','form[id^="new_"]', function(){
    console.log('Matched!')
});

(我感到惊讶的是,似乎比预期更多参与了AjQuery响应中返回的jQuery行为。)

1 个答案:

答案 0 :(得分:0)

$(document).on("change","form[id^=\"new_\"]" function(){
        console.log("Matched!")
    });

对于委托,您希望将原始选择器委托给父级,因为事件将冒出来。

但是,负载不会冒泡。在这种情况下,更改可能就足够了,但它会触发并尝试在每次文档更改时查看委托是否有效。

然后我建议您在为表单加载AJAX后创建自定义事件。

示例:

$(document).on("customevent","form[id^="new_"]" function(){
    console.log("Matched!")
    $.ajax(url, function(response){
        //success
       $(document).append(response);
       $('form').trigger('customevent');
    });
});

HTH