2011-04-01 159 views
0

我使用了jQuery自動完成插件,我想自定義此事件:當選擇從下拉列表中的元素如何從application.js文件中調用jQuery的控制器動作?

select: function(event, ui) { 
      $('.topic_field').val(ui.item.topic.name); 
      return false; 

從本質上講,它會觸發回調。截至目前,它只將所選元素添加到文本字段。我希望填充該字段,並讓我的應用程序向視頻更新控制器操作發送POST請求,以便用戶不需要明確地按下按鈕。我怎樣才能做到這一點?

UPDATE:

這裏是視頻控制器的表演形式來看:

<%= form_for @video, :url => {:action => "update"}, :remote => true do |f| %> 
    <div class="field"> 
    <%= f.text_field :topic_names, :class => "topic_field" %> 
    </div> 
    <%= f.submit "Add Topic" %> 
<% end %> 

這裏是我的jQuery代碼:

var url = $('.edit_video').attr('action'); 
var val = ui.item.topic.name; 
$.post(url, {data:val}); 

這是我的routes.rb :

resources :videos 
resources :video_votes 
resources :users 
resources :profiles 
resources :genres 
resources :topics 
resources :topicables 
resource :session 

這裏是我的更新動作:

def update 
@video = current_user.videos.find(params[:id]) 

respond_to do |format| 
    if @video.update_attributes(params[:video]) 
    format.html { redirect_to(@video) } 
    format.js 
    else 
    format.html { render :action => "edit" } 
    end 
end 
end 

回答

0

退房如何從你的選擇框後的數據相關的控制器動作jQuery.post文檔。

我對自動完成插件並不熟悉,但我認爲它會在選擇框中出現onChange事件。當用戶已經做出選擇,你需要執行下面的(未經測試):

var url = $('myForm').attr('action'); 
var val = $('mySelectBox').val(); 
$.post(url, {data:val}) 

在你的控制器,你可以訪問該使用:

params[:data] 

這將回報您的選擇框的值。然後,您可以在控制器代碼中正常使用它。

+0

我只需要通過'type'選項和'url'選項作爲更新操作對應的url? – 2011-04-01 08:28:58

+0

更新操作的相應網址是什麼? – 2011-04-01 08:35:28

+0

您不需要傳遞'type'選項,因爲它默認爲POST,並且沒有明確需要'url'選項,因爲它會在第一個參數中拾取字符串。 – 2011-04-01 08:40:40

0

使用jQuery的AJAX功能,從你的行動URL(「/主題/列表」),或在您的視頻#更新的東西

$.post('video/update', 
    data: {yourdata}, 
    function(data) { 
    //callback function 
    } 
); 

確保獲取數據返回的東西爲你的JS要求:

def update 
    blah 
    respond_to do |format| 
    format.js { return somethinghere } 
    end 
end 
+0

我一般有這個功能的麻煩。你能舉個例子嗎? – 2011-04-01 08:23:16

+0

當POST發生時你想要發生什麼?你只是想更新數據庫;重定向用戶等。 – 2011-04-01 08:25:30

+0

我想更新數據庫,是的。我想要執行與點擊表單按鈕完全相同的操作。 – 2011-04-01 08:27:11

相關問題