2011-12-06 8 views
0

フィールドに入力されたテキストが条件の集合を満たさない場合にのみ.datepickerを起動する必要があります。しかし、フォーカスを取得しているフィールドやボタンが押されているとき以外は.datepickerを起動する方法を理解できません。別のJS関数からjQuery .datepickerを起動する

私は何をしようとしている...

HTML

<input type="text" id="userDate" name="userDate" style="width: 100px;" onblur="checkDate(this.id);" /> 

JS

function checkDate(theId) 
{ 
    var enteredValue = document.getElementById(theId).value; 
    var checkedValue = evaluateValue(enteredValue); // this checks to see if the text meets the criteria 

    if (checkedValue == null) 
    { 
     // this is where I want to call the .datepicker to have the calendar show up 
     $("#userDate").datepicker(); 
    } 
    else 
    { 
     document.getElementById(theId).value = checkedValue; 
    } 
} 

私が知っているカレンダーがちょうどその時思いついたならば、これは容易になるだろうテキストフィールドにフォーカスが移ります。しかし、これは顧客がそれが働くことを望む方法ではありません。ユーザーが希望する形式に収まる間は、ユーザーの入力を受け入れる必要があります。そうでない場合は、カレンダーとデフォルトの強制形式が必要です。

ありがとうございました。

+0

jbleryでonblurイベントをバインドすることをお勧めします。 htmlの代わりに。 – albertjan

答えて

3

あなたはjQueryのUIでの日付ピッカーを使用している場合は、このような日付ピッカーを表示します:

$("#userDate").datepicker("show"); 

編集:

あなたのコードは、おそらくこのような何かを見なければならないでしょう:

$(function(){ 
    $("#userDate").datepicker(); // <-- Create the datepicker on load 
}); 

function checkDate(theId) 
{ 
    var enteredValue = document.getElementById(theId).value; 
    var checkedValue = evaluateValue(enteredValue); // this checks to see if the text meets the criteria 

    if (checkedValue == null) 
    { 
     // this is where I want to call the .datepicker to have the calendar show up 
     $("#userDate").datepicker("show"); // <-- Show datepicker when needed 
    } 
    else 
    { 
     document.getElementById(theId).value = checkedValue; 
    } 
} 
+0

上記のコードを使用すると、エラーコンソールに「http://ajax.googleapis.com/...で定義されていません」というメッセージが表示されます – seveninstl

+0

@ user1084262私の更新答えをご覧ください負荷時にdatepickerを作成する必要があります。 –

+0

私はすでにそれを試みました。その問題は、テキストフィールドが最初にフォーカスを取得し、カレンダーがポップアップするときです。私はそれを抑える方法が必要です。私も無効としてdatepickerを初期化しようとしましたが、ポップアップカレンダーだけでなく、入力フィールドも無効にしました。 – seveninstl

0

ペプシマックスの多くの缶、さらに多くの時間の研究、試行錯誤の後、これは私が思いついたものです...そしてそれは私の必要を満たしています。

$(document).ready(function() 
    { 
     $("#userDate").blur(function() 
     { 
      var convertResults = convertMyDate('userDate'); // call to my code that checks the date for accepted formats 

      if (convertResults == null) 
      { 
       $("#userDate").datepicker({ 
        changeMonth: true, 
        changeYear: true 
       }); 
       $("#userDate").datepicker("show"); 
      } 
      else 
      { 
       document.getElementById('userDate').value = convertResults.toString('MM/dd/yyyy'); 
      } 
     }); 
    }); 

唯一の問題は、クライアントのフォームに14の日付フィールドがあることです。だから...私のコードでこれをさらに13回コピーする!私はちょうど今、ル​​ープ内でそれらのすべてを開始する単一の機能にすべてをロールバックする方法を理解する時間がありません...

それに関する提案はありがたいです。

関連する問題