我无法通过UJS调用来更新页面显示。我想在选择框发生变化时更新div的值(我在谷歌上搜索但无效)。
我设置了更改功能(我正在使用Haml):
%script
$("#timesheet_worker_id").change(function() {
-# This works, so we know we're responding to the change event:
-# alert('Fired the change function');
$.ajax({url: "/timesheet_show_worker_name",
async: false,
data: 'selected=' + this.value,
dataType: 'script'})
});
});
我的控制器有以下内容:
def show_worker_name
calculated = 'Adam Bilbo'
render(:update) {|page|
### The following works just fine!
#page << "alert('This is a test')"
### This doesn't; DOM is updated but not displayed; test data for now
page << "$('#timesheet_worker_name').val('Adam Bilbo')"
}
end
我的观点有(我使用的是simple_form):
=f.association :worker, :collection => Worker.all(:order => 'worker_number'), :prompt => 'Select a worker', :label_method => :worker_number, :label => "Worker Number", :input_html => {:class => 'startField'}
%p{:id => :timesheet_worker_name}
当ajax调用完成时,我检查DOM并且值在那里;即在... 控制台:
$('#timesheet_worker_id").val()
显示'Adam Bilbo',但该值未显示在我的页面上。
我正在运行Rails 3.0.9和gem jquery-rails 1.0.9;任何帮助搞清楚我忽视的东西是非常感谢!感谢。
已解决 - 下面的@iWasRobbed解决方案有效。但是,基本问题是在更新'#timesheet_worker_name'时使用val()而不是text(),因此我的原始方法也适用于该更改。
答案 0 :(得分:0)
让我们重新调整一下......
:javascript
$('#timesheet_worker_id').change(function() {
$.ajax({
url: '/timesheet_show_worker_name',
data: { 'selected': $(this).value },
success: function (json) {
$('#timesheet_worker_name').text(json.name);
},
error: function (response) {
alert('Oops, we had an error.');
}
});
});
你的控制器动作是:
def show_worker_name
calculated = 'Adam Bilbo'
render :json => { :name => calculated }, :status => :ok
end