Javascript 如果没有“ajax”,我如何调用ajax;链接到;什么样的帮手?

Javascript 如果没有“ajax”,我如何调用ajax;链接到;什么样的帮手?,javascript,jquery,ruby-on-rails,css,ajax,Javascript,Jquery,Ruby On Rails,Css,Ajax,我有一块像: - competitors.each do |competitor| %dl %dt ... %dd %span{:id => "#{competitor['watchers']}"}= "#{((competitor['watchers']*100.0)/30000).round.to_f}%" - competitors.each do |co

我有一块像:

      - competitors.each do |competitor|
        %dl
          %dt
            ...
          %dd
            %span{:id => "#{competitor['watchers']}"}= "#{((competitor['watchers']*100.0)/30000).round.to_f}%"
      - competitors.each do |competitor|
        :javascript
          $("##{competitor['watchers']}").css({ width: "#{((competitor['watchers']*100)/30000)}px" });
        %dl
          %dt
            ...
          %dd
            %span{:id => "#{competitor['watchers']}"}= "#{((competitor['watchers']*100.0)/30000).round.to_f}%"
请注意,它生成dinamic CSS id,每个块剪辑一个,html是一个不同dd-->span-->id号的列表:

<dl>
  <dt>
    ...
    <dd>
      <span id="774">93.0%</span>
    </dd>
  </dt>
</dl>
<dl>
  <dt>
    ... 
    <dd>
      <span id="13774">46.0%</span>
    </dd>
  </dt>
</dl>
我如何调用ajax(在Rails3.2.3中:remote=>true),而不链接到某种帮助程序

直到现在,我尝试从内部块调用JS,如:

      - competitors.each do |competitor|
        %dl
          %dt
            ...
          %dd
            %span{:id => "#{competitor['watchers']}"}= "#{((competitor['watchers']*100.0)/30000).round.to_f}%"
      - competitors.each do |competitor|
        :javascript
          $("##{competitor['watchers']}").css({ width: "#{((competitor['watchers']*100)/30000)}px" });
        %dl
          %dt
            ...
          %dd
            %span{:id => "#{competitor['watchers']}"}= "#{((competitor['watchers']*100.0)/30000).round.to_f}%"

但它不起作用,代码从未被注入DOM。

看起来您试图显示某种条形图,在这种情况下,我建议如下(我假设您使用的是jQuery,因为它是被标记的):

更改块以向每个跨度添加唯一的类。这将在以后为您提供样式好处

%dd
        %span{:id => "#{competitor['watchers']}", :class => "progress-bar"}= "#{((competitor['watchers']*100.0)/30000).round.to_f}%"
然后,您应该能够使用页面底部的一些jQuery来选择每个jQuery,并对其进行一些基本计算:

$('span.progress-bar').each(function(index,element){
    var num = $(element).attr('id'); // get element id
    var width = parseInt(num * 100 / 30000); // do your math, then get the integer value for width
    $(element).css('width',width+'px'); // set width
}

我知道您在寻找ajax,但除非我遗漏了什么,否则这应该可以解决您的问题。

您可以使用link_to中的:remote=>true选项吗?对不起,Luca,您是将javascript放在html.erb页面中了,还是将其添加到rails代码中了?我会将它添加到html.erb页面的底部,因为它会在浏览器看到它时立即运行,并且在它工作之前,您需要页面上的所有元素。这有帮助吗?你的竞争对手也不需要这个。每个循环,你需要它。我已经将js放在html.haml的底部,并从竞争对手那里删除了js。每个循环,但仍然错过了一些东西。。。我看不到html/css结果页面中的“注入宽度+‘px’”。。。正确地说,我希望在js操作后看到46.0%,而我只看到46.0%