web-dev-qa-db-ja.com

JS:コードでぼかしイベントをトリガーする方法

カレンダーフィールドに関連付けられているぼかしイベントをトリガーするのに助けが必要です。

トリガーしようとしているイベントが/media/system/calendar.jsの1003行目あたりに追加されています

JoomlaCalendar.prototype._bindEvents = function () {
    var self = this;
    this.inputField.addEventListener('blur', function(event) {
        var calObj = JoomlaCalendar.getCalObject(this)._joomlaCalendar;

イベントが関連付けられているフィールドは、私のテストの[公開の開始]フィールドです

<input type="text" id="jform_publish_up" name="jform[publish_up]" value="2012-01-04" size="22" class="inputbox" data-alt-value="2012-01-04" autocomplete="off">

私がぼかしイベントをトリガーしようとしているJSの私のビット。

function addDate(target_field) 
{
    document.getElementById(target_field).value = currentDate();
    document.getElementById(target_field).blur();
}

最初の行は現在の日付をフィールドに追加し、他のフィールドタイプでは正常に機能し、カレンダーフィールドにカーソルを置いて、試行する前のある時点で(これが通常ぼかしをトリガーする)ままにしておくと、カレンダーフィールドで機能しますフォームを送信します。

上記のぼかしイベントで実行する必要がある数行のコードまで追跡して、フィールドの新しい値を保存し、以前の値にリセットしないようにしました。

2行目は、関数をトリガーしようとしているところで、何も影響がないと思われる最新のものだけがあります。

そして、完全を期すために、公開開始フィールドに日付を追加するプロセスを開始する私の別のテストフィールドを示します。

<input type="text" name="jform[note]" id="jform_note" value="3432" class="inputbox" size="40" onchange="addDate('jform_publish_up')" maxlength="255" aria-invalid="false">

これは、先週のこの質問の続きです 別のフィールドが変更されたときにのみフィールドを更新する方法 。日付を保存できれば、それを閉じることができます。

17/11更新-これは、日付の値がtarget_fieldに追加された後に実行する必要があると私が思うコードです。 /media/system/js/calendar.js約1013行目。

    if (calObj) {
        if (calObj.inputField.value) {
            if (typeof calObj.params.dateClicked === 'undefined') {
                calObj.inputField.setAttribute('data-local-value', calObj.inputField.value);

Data-local-valueが設定されていない場合、これはカーソルがフィールドを離れるときに発生し、送信時に実行されるcalendar.jsの他の処理はフィールドを元の値に戻します。これは、ほとんどのJoomla日付フィールドで確認できます。フィールドのイベントを検査すると、3番目のエントリであるcalendar.jsの下にあるこのコードで確認できます。

2
Irata

時々、あなたは木の森を見ることができません。

私のJSは今このように見えます

function addDate(target_field) 
{
    document.getElementById(target_field).value = currentDate();
    document.getElementById(target_field).focus();
    document.getElementById(target_field).blur();
}

そしてそれは動作します!!!

1
Irata