2

クラス「date-time-field」と隠しフィールドdatetimeを持つ2つのテキストフィールド、日付と時刻があります。日付または時刻が変更されるたびにJavaScriptを使用して2つを結合し、それをdatetime非表示フィールドに保存しようとしています。これがjavascriptです(coffeescriptから変換されたもの):

$('.date-time-field').change(function() {
  var date, time;
  date = $('#date').val();
  time = $('#time').val();
  return $('#start_time').val(date + " " + time);
});

私のキュウリ テストには、Firefox ウィンドウで実行されるように @javascript タグが含まれています。テストが開いている Firefox ウィンドウにフォーカスを置いている限り成功しますが、開いている別のウィンドウにフォーカスを移動すると、変更イベントが発生しないため失敗します。ユーザーが奇妙なことをした場合、これが本番環境で再現されるのではないかと心配しています。

ステップ定義はフォームに記入しています:

When /^I create a valid event$/ do
  fill_in :name, :with => "Blackbeard's modest event for modest folk"
  select Tier.first.number.to_s, :from => 'event_tier_id'
  select Venue.first.name, :from => 'event_venue_id'
  fill_in 'date', :with => "05/03/2012"
  fill_in 'time', :with => " 08:45"
  click_button 'Save'      
end

おそらく変更に加えて、ぼかしのような別のイベントを使用する必要がありますか、それとも本番環境では問題にならないので、テストに wait_for 呼び出しを入れるだけですか?

4

2 に答える 2

4

このディスカッションによると、テキストエリアがフォーカスを失ったときに、カピバラfill_inは実際にはイベントをトリガーしません。change一方、jQuery は、要素がフォーカスを失うまでchange、テキストエリアでのイベントを延期します (ドキュメントを参照してください)。

だから私が推測しているのは、フォーカスを別のウィンドウに移動するとfill_in、イベントがトリガーされずchange、フォーカスが失われるため、changeその後もイベントがトリガーされないということです。

ただし、フォーカスが失われていない場合は、ウィンドウがまだフォーカスされている間に保存ボタンがクリックされ、(推測では) これにより変更正常にトリガーされ、隠しdatetimeフィールドが設定されます。

これは、いくつかの情報に基づいた推測にすぎません。解決策として、上記の github ディスカッションにいくつかのアイデアが投稿されています。それらを参照することをお勧めします。

それが役立つことを願っています!

于 2012-08-09T13:50:42.607 に答える