2015-12-04 69 views
0

我有一個基於傳遞值從一個頁面到另一個創建動態表的問題。在第一頁上,我定義了開始時間,結束時間和增量間隔。所以在我選擇開始時間之後,比如早上8點,選擇會議長度15分鐘,結束時間將根據開始時間以15分鐘爲間隔創建。示例結束時間:早上8點15分,上午8點30分,上午8點45分......等等,直到我的最後一個值不能大於下午9點。我可以在結束時選擇這些值中的任何一個。在我選擇這三個值開始,結束和會議長度後,我點擊提交,將我帶到第二頁。在這個頁面上,我想根據傳遞的值創建我的表。這是我迄今爲止的代碼:如何根據開始和結束時間值創建動態表?

<form name="myForm" id="myForm" method="post" action="SeconfPage.cfm"> 
     <fieldset> 
      <table> 
      <tr> 
       <th>Date</th> 
       <td><input type="date" id="datepicker" name="datepicker"/></td> 
      </tr> 
      <tr> 
       <th>Start Time</th> 
       <td><input type="text" id="stime" name="stime"/></td> 
      </tr> 
      <tr> 
       <th>Length of meeting</th> 
       <td> 
       <select name="meeting" id="meeting"> 
        <option value="">--Select length--</option> 
       </select> 
       </td> 
      </tr> 
      <tr> 
       <th>End Time</th> 
       <td><input type="text" id="etime" name="etime"></td> 
      </tr> 
      <tr> 
       <td><input type="button" value="Create" onClick="getTable()"></td> 
      </tr> 
     </table> 
    </fieldset> 
</form> 

$(function() { 
     for (var i = 5; i <= 60; i += 5) { 
      $('#meeting').append('<option value="' + i + '">' + i + ' min' + '</option>'); 
     } 

     function setEndTime() { 
      var meetingLength = parseInt($('#meeting').find('option:selected').val() || 0); 
      var selectedTime = $('#stime').timepicker('getTime'); 
      if(selectedTime == null || selectedTime == ""){ 
       alert("Please select the start time"); 
      }else{ 
       selectedTime.setMinutes(selectedTime.getMinutes() + parseInt(meetingLength, 10), 0); 
       $('#etime').timepicker('option', 'minTime', selectedTime); 
       $('#etime').timepicker('setTime', selectedTime); 
      } 
     } 

     $('#stime').timepicker({ 
      'timeFormat':'h:i a', 
      'minTime': '8:00 AM', 
      'maxTime': '9:00 PM', 
      'step': 30 
      }).on('changeTime', function() { 
      setEndTime(); 
     }); 

     var count = 0; 
     $('#etime').timepicker({ 
      'timeFormat':'h:i a' + ' (Slot '+count+')', 
      'minTime': '8:00 AM', 
      'maxTime': '9:00 PM', 
      'step': function() { 
       var val = parseInt($('#meeting').find('option:selected').val()); 
       count++ 
       return val; 
      }, 

     }); 


     $('#meeting').bind('change', function() { 
      setEndTime(); 
     }); 
    }); 

    function getTable(){ 
      document.myForm.submit(); 
    } 

我想知道如何以及什麼是在第二頁上創建表格的最佳方法。所有值都從我的表單傳遞。一種用於例如在第二頁上,我有:

start time: 8:00am 
end time: 5:00pm 
meeting length: 20min 

我的想法是創建一個for循環是這樣的:

for(var i=stime; i<=etime; i+=meeting){ 
    var tbl = "<tr><td>"+stime+"-"+i+"</td></tr>" 
} 

像這樣的東西會給我基礎上,開始時間和下一個值增量。在創建表之後,將這個表存儲在MySQL數據庫中的最佳方式是什麼?我仍然沒有弄清楚如何讓這個工作。如果任何人都能給我一個提示,那麼最好的方法是什麼,如果我走在正確的道路上。

在此先感謝。

+1

(編輯)*什麼是該表存儲在MySQL DATABSE一旦表創建*只是我¢的最好方式,但是這是你應該弄清楚在設計UI之前。否則,前端可能會指定一個非常糟糕的數據庫結構......我建議退後一步。把它分成幾步。首先決定您的應用程序的最佳數據庫設計。然後在界面上工作,最後查詢。 – Leigh

+0

我仍然在決定我應該走哪條路以及在這種情況下最有效的方法。感謝您的建議。 –

+0

如果您正在考慮使用整數來確定您的會議時間和持續時間,一種方法是使用unix時間。 Unix時間在java(ColdFusion的底層引擎)以及UTC中相當標準。但是,如果您的應用程序不會包含多個位置,則這會帶來進一步的複雜性,這可能是不必要的。也就是說,使用unix時間來存儲時間/日期的好處是它將被標準化/集中化,並且您可以使用像Moment.js這樣的UI庫來將時間本地化到最終用戶的位置。 – rodmunera

回答

1

請嘗試以下方法(對於第2頁上創建表):

<cfscript> 
    //existence and type checking 
    param name="FORM.datepicker" type="date"; 
    param name="FORM.sTime" type="time"; 
    param name="FORM.eTime" type="time"; 
    param name="FORM.meeting" type="range" min=5 max=60;//minutes 
    //create currentTimeSlotBegin and lastTimeSlotBegin for cfloop 
    currentTimeSlotBegin = createDateTime(year(FORM.datepicker), month(FORM.datepicker), day(FORM.datepicker), hour(FORM.sTime), minute(FORM.sTime), 0);//this will be incremented, within cfloop, for each time slot 
    lastTimeSlotEnd = createDateTime(year(FORM.datepicker), month(FORM.datepicker), day(FORM.datepicker), hour(FORM.eTime), minute(FORM.eTime), 0);//used only for creating lastTimeSlotBegin below 
    lastTimeSlotBegin = dateAdd("n", FORM.meeting*-1, lastTimeSlotEnd);//subtract meeting length to get beginning of last time slot 
</cfscript> 
<table> 
    <tr> 
    <th>Time Slots for <cfoutput>#dateFormat(FORM.datepicker, "ddd, mmm dd, yyyy")#</cfoutput></th> 
    </tr> 
    <cfloop condition="currentTimeSlotBegin lte lastTimeSlotBegin"> 
    <cfset currentTimeSlotEnd = dateAdd("n", FORM.meeting, currentTimeSlotBegin)> 
    <tr> 
     <td><cfoutput>#timeFormat(currentTimeSlotBegin, "hh:nn tt")#-#timeFormat(currentTimeSlotEnd, "hh:nn tt")#</cfoutput></td> 
    </tr> 
    <cfset currentTimeSlotBegin = dateAdd("n", FORM.meeting, currentTimeSlotBegin)> 
    </cfloop> 
</table> 

感謝!

-Aaron

+0

@AronNeff我有一個關於這個cfloop條件的問題。所以我試圖把這個放在另一個內。在運行該代碼後,我從第一個循環獲取第一個ID的輸出,之後沒有任何結果。出於某種原因,在我的循環嘗試第二次之後,未能通過該條件。你知道如何解決這個問題嗎?我嘗試在兩個循環之間重置來自cfloop條件的值,但沒有任何更改。 –

1

這是有點兒你想找的,它是一個表中創建並使用另一個表中的數據

https://github.com/TheOriginalDeveloper/Dynamic-and-responsive-table

+0

我正在看你發給我的這個鏈接,但那是一種我需要的不同。在我的情況下,首先我要做的是弄清楚如何轉換時間值,然後我可以在for循環中使用時間值來創建值(時間範圍),然後根據這些值構建表。 –

+0

嘗試並保持簡單,儘量用它作爲數字,但使用if語句來檢測天氣秒數/分鐘/小時達到60的值,然後在增加char之前,你知道我的意思嗎? – TheOriginal

+0

是的,你知道什麼是將時間值轉換爲數字的最佳方式嗎?會議長度值已經是一個整數。剛開始和結束的時候我應該轉換爲數字。在我提交表單並在屏幕上輸出Form.value(s)之後,他們看起來像這樣:上午8:30。 –

1

我會作出一些假設......有些事情是要在發生填充這些會議插槽,通常會議上的時間爲(因此它只是數據庫表中的單個日期時間)。

同意Leigh,你想要做什麼決定了數據結構,然後使用它的查詢來構建你的數據顯示(本例中爲表)。所以,如果你到底需要存儲的數據是

dateTimeStamp     ¦ meetingID  ¦ meetingSlotData 
{ts '2015-07-04 20:00:00'} ¦ 1    ¦ Peter Pan 
{ts '2015-07-04 20:15:00'} ¦ 1    ¦ Wendy 

首先使用日期時間選擇器來填充數據表(只是做手工目前)

<cfset newQuery = queryNew("dateTimeStamp, meetingID, meetingSlotData","Timestamp, Integer, VarChar")> 
<cfset queryAddRow(newQuery, 2)> 
<cfset querySetCell(newQuery, "dateTimeStamp", {ts '2015-07-04 20:00:00'}, 1)> 
<cfset querySetCell(newQuery, "meetingID", 1, 1)> 
<cfset querySetCell(newQuery, "dateTimeStamp", {ts '2015-07-04 20:10:00'}, 2)> 
<cfset querySetCell(newQuery, "meetingID", 1, 2)> 

<cfdump var="#newQuery#"> 

然後查詢數據構建你的表

<cfquery name="getMeeting"> 
    SELECT * 
    FROM meetings 
    WHERE id = 1 
</cfquery> 

<table> 
<cfoutput query = "getMeeting"> 
    <tr><td>#dateTimeStamp#</td><td>#meetingID#</td></tr> 
</cfoutput> 
</table> 
+0

我的問題是,如果我只用一個時間變量使用這個dateTimeStamp,我將如何創建我需要的時間段?我不完全理解你在上面的代碼中試圖做什麼。如果你可以再解釋一次。 –

相關問題