使用用户输入的文本字段值更新数组

时间:2014-02-28 17:25:58

标签: javascript jquery ruby-on-rails ruby ajax

我正在开发一个rails应用程序(版本:2.3.8)ruby版本1.8.7,我有一个表,列出了特定类的所有记录 例子

视图

<h2> purifications in last <%= text_field_tag "number", @n %> days </h2>

<div class="purifications"> 
 <table>
    <%@purifications.each do |r|%>
     <tr>
       <td><%= @purification.name %></td>
     </tr>
    <%end%>
 </table>
</div>

控制器

def purifications
    @n = 30
    @purifications = Purification.find(:all, :conditions => ["end_date > ?", @person.id, @n.days.ago.to_s(:db)])
end

我想要一种方法来使用Jquery或javascript和ajax使用远程方法更新它。  有人可以帮我解决这个问题吗?

我尝试过使用

查看

 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
 <script> 
  $j = jQuery.noConflict(true);

    $j(document).ready(function(){
     $j("number").change(function update_table(){
        $j.post("/protein_purification/remote_test",
          {
          number_for_update: $('this').value,
          });
        }); 
     });


</script>

控制器

def remote_test
    raise params.inspect
end

我根本无法传递任何参数, 控制台也没有给出任何错误。 我无法弄清楚它是如何工作的,因为我是ajax的新手。 有没有更容易的方法去做,我正在使用rails 2.3.8 任何人?谢谢

1 个答案:

答案 0 :(得分:1)

您的选择器出现问题:

$j(document).ready(function(){
 $j("number").change(function update_table(){
   # ^ Here, it is trying to find a HTML element <number></number>

您应该使用此选择器:

$j(document).ready(function(){
 $j("#number").change(function update_table(){
   # ^ this will try to find any html element matching id 'number'

另外,我不确定,但我认为你不能在这样的回调中定义一个函数,试试这个:

$j(document).ready(function(){
 $j("#number").change(function () {
    $j.post("/protein_purification/remote_test",
      {
        number_for_update: $('this').value,
      });
    }); 
 });

或同等的:

$j(document).ready(function(){
  $j("#number").change( update_table($(this).val()) );
});

window.update_table = function (value) {
    $j.post("/protein_purification/remote_test",
      { number_for_update: value });
    });      
    # this function is clearly unfinished
}