2012-01-17 32 views
1

我無法通過UJS調用來更新頁面顯示。我想在選擇框發生變化時更新div的值(我已經遍佈整個地方,但無濟於事)。Rails3 UJS更新不顯示

我設置的更改功能,像這樣(我用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() 

顯示「亞當比爾博」,但價值不顯示我的網頁上。

我正在運行Rails 3.0.9和gem jquery-rails 1.0.9;任何幫助搞清楚我俯瞰的是最受讚賞的!謝謝。

已解決 - 解決方案由@iWasRobbed在下面的作品。然而,基本問題是在更新'#timesheet_worker_name'時使用val()而不是text(),因此我的原始方法也適用於此更改。

回答

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 
+0

對不起;與我的原始代碼相同。頁面上沒有顯示,但DOM值已設置。 – JESii 2012-01-19 00:16:50

+0

對不起,我甚至沒有看'#timesheet_worker_name'是什麼......你不能用'val()'設置段落'p'元素。你需要使用:'$('#timesheet_worker_name')。text(json.name);'而不是。我更新了我的答案。再次抱歉! – iwasrobbed 2012-01-19 03:19:02

+0

這樣做了;謝謝@iWasRobbed!這也意味着我的原始示例與從val()到text()的相同更改一起工作...我測試了它。 – JESii 2012-01-19 11:17:18