3

今日、私はDatePicker-Pluginを使用して、PhoneGapで最初の(Android-)アプリの作成を開始しました。数時間の調査の後、私はそれを機能させることができました(phonegap 2.0で機能しないdatePickerプラグインのおかげで)が、正確には私は望んでいません:

class="nativedatepicker" (date)(jQueryクリックイベントのセレクター)との入力class="nativetimepicker" (time)があるので、最初の入力で日付を選択し、2番目の入力で時刻を選択できます。

これを1つの入力にマージして、1つのステップで日付と時刻を選択することはできますか?私はここのどこかでこれを行うことができると思います(プラグインからのいくつかのJS):

window.datePicker.show({
    date : myNewDate,
    mode : 'date', // date or time or blank for both
    allowOldDates : true
}

しかし、mode空白のままにすると、エラーがスローされます。

ご協力いただきありがとうございます!

4

3 に答える 3

0

いいえ、現在、Android用の現在のDatePickerプラグインを使用してそれを行うことはできません。ただし、modeプロパティを空白に設定すると、両方が取得されると言われています。DatePickerPlugin.javaファイルで確認できます。

if (ACTION_TIME.equalsIgnoreCase(action)) {       //mode is set to "time"
        //plugin java code
    } else if (ACTION_DATE.equalsIgnoreCase(action)) {         //mode is set to "date"
        //plugin java code
    } else {        //mode is blank
        Log.d(pluginName, "Unknown action. Only 'date' or 'time' are valid actions");
        return;
    }

日付と時刻の両方を選択する問題の私の解決策は、最初に日付ダイアログを表示し、成功コールバックで時刻ダイアログを表示することです。

コードは次のようになります。

        var showDialog = function(mode, date, cb) {

            window.plugins.datePicker.show({
                date : date,
                mode : mode
            }, function(dateStr) {
                cb(new Date(dateStr));
            });
        };

        $('.nativedatepicker').click(function(e) {

            e.preventDefault();
            var currentField = $(this);

            var oldDate = new Date(currentField.val()) || new Date();

            //show the dialog to select the date
            showDialog("date", oldDate, function(newDate) {

                //we have a new date selected, copy time values from the old date for time dialog
                newDate.setHours(oldDate.getHours());
                newDate.setMinutes(oldDate.getMinutes());

                //show the time dialog          
                showDialog("time", newDate, function(newDateTime) {

                    //now we have time selected, copy it to new date and update the field
                    newDate.setHours(newDateTime.getHours());
                    newDate.setMinutes(newDateTime.getMinutes());
                    currentField.val(newDate.toISOString());
                });

            });
            return false;
        });
于 2012-12-25T23:12:28.233 に答える
0

これがDZLの答えに対する私の代替ソリューションです。日付と時刻は、同じ日付を変更する 2 つの別々のボタンに接続されています。

 var date = new Date();
 var $date = $('#date_result');

  var normalizeNumber = function(n){
    var c = parseInt(n, 10); 
    return (c<10) ? "0"+c : c; 
 }

 var normalizeTime = function(t){
    var hours = t.getHours();
    var minutes = t.getMinutes();
    var meridiem = ' AM ';
    if (hours > 12) {
        hours -= 12;
        meridiem = ' PM ';
    } else if (hours === 0) {
       hours = 12;
    }
    minutes =  normalizeNumber(minutes);
    return hours + ':' + minutes + meridiem; 
 }

$('#date-btn').on('click', function(event) {
    var myNewDate = date;
    if(typeof myNewDate === "number"){ myNewDate = new Date (myNewDate); }
    window.plugins.datePicker.show({
        date : myNewDate,
        mode : 'date',
        allowOldDates : true
    }, function(returnDate) {
        var newDate = new Date(returnDate);
        newDate.setMinutes(date.getMinutes());
        newDate.setHours(date.getHours());
        date = newDate;
        $date.val(newDate.toLocaleDateString() + ' ' + normalizeTime(newDate));
        $date.blur();
    });
});

$('#time-btn').on('click', function(event) {
    var myNewTime = date;
    if(typeof myNewTime === "number"){ myNewTime = new Date (myNewTime); }
    plugins.datePicker.show({
        date : myNewTime,
        mode : 'time',
        allowOldDates : true
    }, function(returnDate) {
        var newDate = new Date(returnDate);
        newDate.setDate(date.getDate());
        newDate.setMonth(date.getMonth());
        newDate.setFullYear(date.getFullYear());            
        date = newDate;
        $date.val(newDate.toLocaleDateString() + ' ' + normalizeTime(newDate));     
        $date.blur();
    });
});
于 2013-03-20T20:00:38.547 に答える
0

正確に空白のままにするにはどうすればよいですか?もしあなたがそうするなら

mode : ,

JS オブジェクトは指定したすべてのキーの値を必要とするため、エラーが発生します。あなたが試すことができます

mode : '',
于 2012-11-23T16:58:23.503 に答える