私はタペストリー 5.3.3 を使用しています (問題 #1844 のパッチが含まれています)...
「onchange」イベントをキャッチして処理する簡単な方法はありますか?つまり、ユーザーが(ポップアップを介して)新しい日付を選択する場所はありますか?
私はもう試した:
<t:datefield value="dateValue" onchange="alert('here');" />
ありがとう、ポール。
私はタペストリー 5.3.3 を使用しています (問題 #1844 のパッチが含まれています)...
「onchange」イベントをキャッチして処理する簡単な方法はありますか?つまり、ユーザーが(ポップアップを介して)新しい日付を選択する場所はありますか?
私はもう試した:
<t:datefield value="dateValue" onchange="alert('here');" />
ありがとう、ポール。
入力フィールドで変更イベントをキャッチできます。プロトタイプを使用している場合は、これを試してください:
$('dateFieldId').observe('change', function(){
alert('gotcha!');
...do whatever you will ...
});
このjsをページに追加する最良の方法は、@Importアノテーションを使用してページ/コンポーネントに貢献するページ/コンポーネントに追加された別のjsファイルを使用することです。
Tapestry.Initializer.FieldChangeObserver = function (parameters) {
new FieldChangeObserver (parameters);
};
var FieldChangeObserver = { };
FieldChangeObserver = Class.create({
initialize:function(parameters) {
$(parameters.dateFieldId).observe('change', function(){
alert('gotcha!');
...do whatever you will ...
});
}
});
次に、ページ/コンポーネントで次のことができます。
@Inject
private JavaScriptSupport javaScriptSupport;
@Component
private DateField dateField;
@AfterRender
private void afterRender() {
JSONObject params = new JSONObject()
params.put("dateFieldId", dateField.getCLientId());
javaScriptSupport.addInitializerCall("FieldChangeObserver", params);
}
免責事項:私はすぐにこれを書き上げ、コードをテストしませんでした.
必要なものを達成するには、両方のアプローチを組み合わせる必要があるようです-タペストリーフレームワーク内でこれを改善する必要があるかどうかは、議論の余地があります....
<t:datefield t:id="selectedDateElem" id="selectedDateElem" onchange="alert('1 onchange attribute');" />
$("selectedDateElem").observe("change", function(event)
{
alert("2 change observer");
});
document.observe(Tapestry.FOCUS_CHANGE_EVENT, function(event)
{
if (Tapestry.currentFocusField && Tapestry.currentFocusField.id == "selectedDateElem")
alert("3 focus change observer");
});
テスト ケース 1:
テスト ケース 2:
したがって、 onchange 属性は変更オブザーバーと同等であるため、唯一の完全な解決策は、アプローチ 2 と 3 を組み合わせることです。
$("selectedDateElem").observe("change", function(event)
{
Page.dateFieldChanged();
});
document.observe(Tapestry.FOCUS_CHANGE_EVENT, function(event)
{
if (Tapestry.currentFocusField && Tapestry.currentFocusField.id == "selectedDateElem")
Page.dateFieldChanged();
});