2015-07-18 5 views
3

У меня хорошее понимание рубинов и рельсов, но мне не хватает знаний в javascript. То, что я хотел бы сделать, это отслеживать, когда пользователь завершает просмотр видео.Trigger a form on javascript event

Я использую wistia и мой код в настоящее время выглядит следующим образом:

:javascript 
    wistiaEmbed = Wistia.embed("#{@chapter.video_id}", { 
    autoPlay: true, 
    videoFoam: true, 
    playerColor: '000000' 
    }); 
    wistiaEmbed.bind("end", function() { 
    document.getElementById('target').style.display = 'none'; 
    document.getElementById('finished').style.display = 'block'; 
    }); 

То, что я хочу, чтобы выполнить это вызов создать действие для моей chapter_completion модели. Это принимает user_id и chapter_id на «конце» видео.

Так что я мог бы сделать эту работу в форме, выполнив:

form_for current_user.chapter_completions.new do |f| 
f.hidden_field :chapter_id, value: @chapter.id 
f.submit 
end 

Однако я хочу, чтобы это было представлено автоматически в фоновом режиме в конце wistia видео.

ответ

0
wistiaEmbed.bind("end", function() { 
    document.getElementById('target').style.display = 'none'; 
    document.getElementById('finished').style.display = 'block'; 
    document.getElementById('formID').submit(); // or 
    //document.getElementsByName('formName').submit(); 
    }); 
+0

Хорошо, что работает! Теперь, если бы я мог добавить что-то дополнительно. Я бы хотел, чтобы форма не была видна, но сохраняла данные. Кроме того, в рельсах создание требует перенаправления или обновления. Как я могу избежать этого? Я просто хочу остаться на одной странице и не иметь видимой формы. –

+0

использовать AJAX, если вы не хотите иметь перенаправления. Если у вас есть jQuery, зайдите на https://api.jquery.com/jquery.ajax/ else, используя собственную javascript-реализацию AJAX – vinayakj