3

今天我開始用PhoneGap創建我的第一個(Android-)應用程序,使用DatePicker-Plugin。調查的幾個小時後,我得到它的工作(感謝datePicker plugin not working in Phonegap 2.0),但不完全是我想要的:PhoneGap 2.0(科爾多瓦)DatePicker PlugIn'mode'-property獲取日期和時間

我有class="nativedatepicker" (date)(選擇了jQuery的單擊事件)和一個與class="nativetimepicker" (time)的輸入,所以我可以選擇在第一次輸入日期和第二次輸入時間。

是否可以合併到一個輸入,我可以在一個步驟中選擇日期和時間?我想我可以在這裏做這個地方(有些JS出來的插件):

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

但是當我離開mode空白,它拋出一個錯誤。

感謝您的幫助!

回答

0

你怎麼把它完全留空? 如果你

mode : , 

你會因爲JS對象需要你指定所有鍵的值出現錯誤。您可以嘗試

mode : '', 
0

無,目前,使用目前的DatePicker插件爲Android,即使他們說,如果你的模式屬性設置爲空,你會得到兩個是不可能的。你可以看到它在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; 
     }); 
0

這裏是我的替代解決方案DZL的答案。我有日期和時間掛鉤了兩個單獨的按鈕,這兩個按鈕都改變了相同的日期:

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(); 
    }); 
});