Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用和动态更新jquery函数_Jquery_Ruby On Rails 3 - Fatal编程技术网

调用和动态更新jquery函数

调用和动态更新jquery函数,jquery,ruby-on-rails-3,Jquery,Ruby On Rails 3,我正在尝试用jquery替换旧的远程调用。我从另一个stackoverflow线程获得以下代码: 但我正在努力让它发挥作用。如果我正确理解UJS,如果我做以下事情: 将脚本放在application.js中 在我的布局中包含application.js(javascript_include_标记:defaults会这样做) 在我的视图模板中有一个id='mydiv'的DOM元素 那么函数应该自动绑定到“mydiv”并在页面加载后执行,对吗?有没有我错过的一步?我不应该命名函数或在视图中直接调

我正在尝试用jquery替换旧的远程调用。我从另一个stackoverflow线程获得以下代码:

但我正在努力让它发挥作用。如果我正确理解UJS,如果我做以下事情:

  • 将脚本放在application.js中
  • 在我的布局中包含application.js(javascript_include_标记:defaults会这样做)
  • 在我的视图模板中有一个id='mydiv'的DOM元素
那么函数应该自动绑定到“mydiv”并在页面加载后执行,对吗?有没有我错过的一步?我不应该命名函数或在视图中直接调用它,对吗


第二,如何动态更新加载URL。例如,我有一个路径为“/controller/:id/action”的嵌套资源。。。如何在渲染时将:id值动态插入加载路径?

在函数中添加以下内容

$('#mydiv').css("background", "red");
div的颜色变了吗?如果有,调试服务器端代码


如果您知道如何在浏览器中打开JavaScript控制台,请打开它并查看是否有任何错误。

这样做的方法是在div标记中设置要加载的属性,然后从application.js文件中获取该属性

some.html

<div data-delay-load="<%= url_for() %>"></div>

很好的一点是,只要包含数据延迟加载属性,就可以在任何页面或同一页面上的多个元素上加载延迟加载。

谢谢。没有回答问题,但帮我找出了问题所在。谢谢。在我发布之后,我意识到我不需要:id,所以我更改了我的路由声明,这样操作就针对集合而不是成员。这允许我使用一个简单的字符串作为加载url,例如load('action/controller')。但是,由于某些原因,结果http请求将字符串附加到完整的当前url而不是基本url,例如GET base/controller/action/controller/action。知道为什么吗?忽略我的问题,这是一个简单的语法错误,需要在路径前面加斜杠,例如load(“/controller/action”)
<div data-delay-load="<%= url_for() %>"></div>
$(function() {

    $('div[data-delay-load]').each( function() {
        var url = $(this).attr('data-delay-load'),
            $element = $(this);

        var _func = function() {
           $element.load(url);
        }

        setTimeout(_func, 3000);
    });
});