2010-03-25 9 views
11

पूर्ण कैलेंडर कैलेंडर दिन पर क्लिक करें, क्या मैं उन घटनाओं को प्राप्त कर सकता हूं जो क्लिक की गई तारीख में पहले से मौजूद हैं?पूर्ण कैलेंडर कैलेंडर दिन पर क्लिक करें, क्या मैं उन घटनाओं को प्राप्त कर सकता हूं जो पहले से क्लिक की गई तारीख में मौजूद हैं?

http://arshaw.com/fullcalendar/docs/mouse/dayClick/

मेरे प्रोजेक्ट मैं एक सरल php साइट है कि उपयोगकर्ता कैलेंडर पर जोड़ने/संपादित करने की अनुमति देने के घटना लिख ​​रहा हूँ के बारे में थोड़ा समझाता हूँ।

  • केवल एक ईवेंट एक तिथि में जोड़ सकता है।
  • यदि उपयोगकर्ता खाली तिथि पर क्लिक करता है, तो नया ईवेंट पॉपअप दिखाएगा (मैं डेक्लिक घटना का उपयोग करता हूं)।
  • यदि उपयोगकर्ता मौजूदा ईवेंट के साथ दिनांक पर क्लिक करता है, तो ईवेंट पॉपअप संपादित करें (मैं ईवेंटक्लिक ईवेंट का उपयोग करता हूं) दिखाता हूं।

समस्या तब होती है जब उपयोगकर्ता मौजूदा ईवेंट के साथ किसी दिनांक के ईवेंट क्षेत्र (ऊपरी क्षेत्र या निचले क्षेत्र) के बाहर क्लिक करता है, यह ईवेंटक्लिक के बजाय डेकक्लिक बढ़ाता है। यदि ईवेंट में मौजूदा ईवेंट मौजूद है तो मैं ईवेंटक्लिक ईवेंट को कैसे ट्रिगर कर सकता हूं और डेकक्लिक ईवेंट छोड़ सकता हूं?

उत्तर

17

क्या आपकी घटनाएं क्लाइंट साइड पर या सर्वर की ओर से संग्रहीत हैं? क्लाइंट की तरफ है, तो यह विशेष रूप से काम करता है, तो आपको लगता है कि क्लिक किए गए समय में घटना चाहते हैं चाहिए:

$('#calendar').fullCalendar({ 
    dayClick: function(date, allDay, jsEvent, view) { 
      $('#calendar').fullCalendar('clientEvents', function(event) { 
       if(event.start <= date && event.end >= date) { 
        return true; 
       } 
       return false; 
      }); 
    } 
}); 

यह कि घटनाओं में क्लिक किए गए समय ओवरलैप और क्लाइंट साइड पर जमा हो जाती दे देंगे। पूरे दिन के स्लॉट के लिए, यह उस दिन सभी घटनाओं को ओवरलैप कर देगा।

यदि आप उस तारीख की सभी घटनाओं को स्वयं ही चाहते हैं, भले ही ऑलडे स्लॉट या टाइम स्लॉट क्लिक किया गया हो।

$('#calendar').fullCalendar({ 
    dayClick: function(date, allDay, jsEvent, view) { 
      if(!allDay) { 
       // strip time information 
       date = new Date(date.getFullYear(), date.getMonth(), date.getDay()); 
      } 
      $('#calendar').fullCalendar('clientEvents', function(event) { 
       if(event.start <= date && event.end >= date) { 
        return true; 
       } 
       return false; 
      }); 
    } 
}); 

अपने घटनाओं सर्वर पर जमा हो जाती है, तो आप अपने dayClick कॉलबैक में प्रदान की तारीख लेगी और उसका उपयोग जो कुछ भी प्रारूप में अपनी आवश्यक जानकारी प्राप्त करने के लिए अपने सर्वर के लिए एक कॉल के निर्माण के लिए करना चाहते हैं।

संपादित एक राउंड ट्रिप कर या जानकारी प्राप्त अन्य तरीकों

$('#calendar').fullCalendar({ 
    dayClick: function(date, allDay, jsEvent, view) { 
      var startDate = new Date(date.getFullYear(), date.getMonth(), date.getDay(), 0, 0, 0).getTime(); 
      var endDate = new Date(date.getFullYear(), date.getMonth(), date.getDay(), 23, 59, 59).getTime(); 
      var cache = new Date().getTime(); 
      $.getJSON("/json-events.php?start="+startDate+"&end="+endDate+"&_="+cache, 
       function(data) { 
        // do stuff with the JSOn data 
       } 
    } 
}); 

और अगर आप राउंड ट्रिप नहीं करना चाहते, तो आप भी में क्या होता है, का कहना है कि इस पर एक नज़र ले जा सकते हैं की कोशिश कर रहा है, तो , fullCalendar.js में refetchEvents। यदि आप पूर्ण कैलेंडरर ट्रंक से अलग होने पर ध्यान नहीं देते हैं, तो आप कहीं भी प्राप्त घटनाओं को सहेज सकते हैं ताकि आप डोम मैनिपुलेशन का एक गुच्छा नहीं कर रहे हैं (घटनाओं की संख्या के आधार पर, क्योंकि वे बड़े हो जाते हैं जो अनावश्यक हो जाएंगे)।

+0

धन्यवाद आपके उत्तर के लिए मेरी घटनाओं घटनाओं का उपयोग करके serverside से आते रहे हैं: "json-events.php" तो मैं घटनाओं को पुनः प्राप्त करने ajax कॉल की ज़रूरत है? क्या जावास्क्रिप्ट फ़ंक्शन लिखना संभव है जो पैरामीटर के रूप में दिनांक स्वीकार करता है और सर्वर की तरफ वापस दिए बिना दिए गए दिनांक की ईवेंट सूची लौटाता है? क्योंकि मैं क्लाइंट ब्राउज़र पर तारीख के लिए ईवेंट देख सकता हूं। कैलेंडर डोम से घटनाओं से पूछना संभव नहीं है? – zawmn83

+0

यदि आप डोम के माध्यम से काम करने की कोशिश कर रहे हैं, तो fullcalendar.js फ़ाइल में कोड को देखकर आपको साइन-आउट करने में मदद मिलेगी। आप देखेंगे कि निर्माता एडम शॉ, टीडीएस को यह जानने के लिए गिना जाता है कि विभिन्न घटनाओं को किस तारीख पर रखा जाए। तो हाँ, यह करना निश्चित रूप से संभव है। यह सिर्फ बहुत अधिक दर्दनाक होने जा रहा है और बहुत सारे डोम हेरफेर की आवश्यकता है - शायद इतना है कि सर्वर के लिए एक राउंड-ट्रिप उतनी तेज होगी। इसके अलावा, डीओएम हेरफेर आपको घटनाओं का JSON नहीं मिलेगा, लेकिन divs जो घटनाओं का वर्णन करने के लिए अंदर रखे गए हैं, केवल प्रदर्शित जानकारी दिखाते हैं। पर्याप्त हो सकता है, हो सकता है। – justkt

+0

मैं टीडी देख सकता हूं जो कैलेंडर डोम में प्रत्येक दिनांक का प्रतिनिधित्व करता है। लेकिन घटनाओं को कैलेंडर तालिका के बाद अलग divs के रूप में संग्रहीत किया जाता है। मुझे यह घटना divs और td संबंध नहीं दिख रहा है। तो मैं ईवेंट div और दिनांक td के बीच संबंध कहां प्राप्त कर सकता हूं? धन्यवाद – zawmn83

0

आप क्षण पुस्तकालय का उपयोग कर सकते हैं।उदाहरण के लिए: तो वहाँ है काम कर कोड

$('#endDate').val(moment(endDate).format('YYYY-MM-DD hh:mm:ss')); 

http://momentjs.com/docs/#/displaying/format/

0

Exested जवाब मेरे लिए काम नहीं किया:

dayClick: function (date, jsEvent, view) { 
    var count = 0; 

    date = date.toDate(); 
    var startDate = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0); 
    var endDate = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59); 

    $('#calendar').fullCalendar('clientEvents', function (event) { 
      if (event.start.toDate() >= startDate && event.start.toDate() <= endDate 
       || event.end.toDate() >= startDate && event.end.toDate() <= endDate) { 
         count++; 
        } 
       }); 
    //count - number of events on this day 
} 
0

यह वह जगह है आप किसी अन्य रूप में वर्तमान दिन के लिए अपने सभी घटनाओं की जरूरत है कार्य:

  var date = $('.js-calendar').fullCalendar('getDate'); 
      date = date.toDate(); 
      var startDate = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0); 
      var endDate = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59); 
      var todaysEvents = $('.js-calendar').fullCalendar('clientEvents', function(event) { 
       if (event.start.toDate() >= startDate && event.start.toDate() <= endDate 
        || event.end.toDate() >= startDate && event.end.toDate() <= endDate) { 
        return true 
       } 
      }); 
6

मैं समाधान के दौरान स्वयं इस मुद्दे पर आया हूं या कैलेंडर पर सार्वजनिक छुट्टियां दर्ज करना। मैंने इसे पूरे दिन की घटनाओं के लिए एक अच्छा समाधान माना। मुझे उम्मीद है कि यह किसी और को लाइन के नीचे आगे की मदद कर सकता है।

$('#calendar').fullCalendar({     
    eventClick: function (event) { 
     ShowEditScreen(event.id); 
    }, 
    dayClick: function (date) { 
     var events = $('#calendar').fullCalendar('clientEvents'); 
     for (var i = 0; i < events.length; i++) { 
      if (moment(date).isSame(moment(events[i].start))) { 
       ShowEditScreen(events[i].id); 
       break; 
      } 
      else if (i == events.length - 1) { 
       ShowCreateNew(date); 
      } 
     } 
    } 
}); 
+0

'' 'moment''' के साथ दिनांक की तुलना करना मेरे लिए क्या काम करता है। – 0x1gene

संबंधित मुद्दे