Javascript - 将变量作为参数

时间:2017-07-13 07:42:19

标签: javascript jquery icalendar

首先,我查看了这个问题herehere,但它对我的问题没有帮助:

我在这里使用稍微修改过的ics.js代码github link

var ics = function() {
'use strict';

if (navigator.userAgent.indexOf('MSIE') > -1 && navigator.userAgent.indexOf('MSIE 10') == -1) {
    console.log('Unsupported Browser');
    return;
}

var SEPARATOR = (navigator.appVersion.indexOf('Win') !== -1) ? '\r\n' : '\n';
var calendarEvents = [];
var calendarStart = [
    'BEGIN:VCALENDAR',
    'VERSION:2.0',
    'PRODID:http://www.example.com/calendarapplication/',
    'METHOD:PUBLISH'
].join(SEPARATOR);
var calendarEnd = SEPARATOR + 'END:VCALENDAR';

return {
    /**
     * Returns events array
     * @return {array} Events
     */
    'events': function() {
        return calendarEvents;
    },

    /**
     * Returns calendar
     * @return {string} Calendar in iCalendar format
     */
    'calendar': function() {
        return calendarStart + SEPARATOR + calendarEvents.join(SEPARATOR) + calendarEnd;
    },

    /**
     * Add event to the calendar
     * @param  {string} subject     Subject/Title of event
     * @param  {string} description Description of event
     * @param  {string} location    Location of event
     * @param  {string} begin       Beginning date of event
     * @param  {string} stop        Ending date of event
     */
    'addEvent': function(subject, description, location, begin, stop) {
        // I'm not in the mood to make these optional... So they are all required
        if (typeof subject === 'undefined' ||
            typeof description === 'undefined' ||
            typeof location === 'undefined' ||
            typeof begin === 'undefined' ||
            typeof stop === 'undefined'
        ) {
            return false;
        };


        var start_date = new Date(begin);
        var end_date = new Date(stop);
        var start = start_date.toISOString().replace(/-/g,'').replace(/:/g, '').replace('.000', '');
        var end = end_date.toISOString().replace(/-/g,'').replace(/:/g, '').replace('.000', '');

        var calendarEvent = [
            'BEGIN:VEVENT',
            'UID:',
            'ORGANIZER:',
            'CLASS:PUBLIC',
            'DESCRIPTION:' + description,
            'DTSTART:' + start,
            'DTEND:' + end,
            'LOCATION:' + location,
            'SUMMARY;LANGUAGE=en-us:' + subject,
            'TRANSP:TRANSPARENT',
            'END:VEVENT',
            //'END:VCALENDAR'
        ].join(SEPARATOR);


        calendarEvents.push(calendarEvent);
        return calendarEvent;
    },

可以通过两种方式调用: 硬编码信息 -

cal.addEvent('Demo Event', 'This is an all day event', 'Nome, AK', '8/7/2013', '8/7/2013');

并传递参数:

cal.addEvent(subject, description, location, begin, end);

使用第一个选项,通过添加\ n \ n

在问题here中提供解决方案

但是,我有一个变量描述,我将其传递给调用此函数的第二个选项

var description =  document.getElementById("description").value;
var subject = document.getElementById("subject").value;
var location = document.getElementById("location").value;
var begin = document.getElementById("begin").value; 
var end = document.getElementById("end").value;
var cal = ics();
cal.addEvent( subject, summary, location, begin, end);

描述是一个文本框,可以由用户填写,当发送到ics()时,将填写前景的ical要求。 不幸的是,由于描述问题,只有第一行文本从textarea发送到日历条目。

我非常不确定我需要在代码中更改哪些内容才能在日历条目中显示所有文本。我正在寻找一个js / jquery解决方案。老实说我不知道​​从哪里开始用我正在使用的当前代码来实现这一点。

1 个答案:

答案 0 :(得分:1)

这可能是一种编码问题或元素“描述”的内容不正确。请检查变量描述的内容,如下所示:

var description =  document.getElementById("description").value;
console.log(description.split('\n').join('#NEWLINE#'));

在这些ical对象中,换行符或换行符将被解释为描述的结尾。尝试用“\\ n”或类似的东西引用它。 有关更多详细信息,您必须检查rfc5546的规范,但文档不是很清楚。

我希望这会对你有所帮助。