2016-10-04 64 views
0

我輸出用PHP日曆和每一個代表一個日期的TD elemets有以下代碼:

onclick="return getDate(2016 + /10/ + 5);" 

這是調用一個函數它做兩件事情在頁面上:

  1. 它評估所傳遞的日期,看它是否是大或小,則當前日期(年月日)使用moment.js
  2. 它增加了一個類的.day-selected如果日期超過當前日期和0級否則爲。

下面是函數:

function getDate(date) { 

    var dateToday = moment(); 
    var selectedDate = moment(date); 

    if (selectedDate.isBefore(dateToday, 'day')) { 
     $(this).addClass('day-expired'); 
     return true; 
    } else { 
     $(this).addClass('day-selected'); 
     return false; 
    } 
} 

這是行不通的。我想讓$(this)是被點擊的特定td元素,當它被點擊時有一個新類,這取決於傳遞的日期。這裏是我到目前爲止的一個片段:

function getDate(date) { 
 

 
    var dateToday = moment(); 
 
    var selectedDate = moment(date); 
 
    
 
    if (selectedDate.isBefore(dateToday, 'day')) { 
 
     $(this).addClass('day-expired'); 
 
     return true; 
 
    } else { 
 
     $(this).addClass('day-selected'); 
 
     return false; 
 
    } 
 
}
.day-selected { 
 
    background:#7cd97c; 
 
    color:#fff; 
 
} 
 

 
.day-expired { 
 
    background:#ed5252; 
 
} 
 

 
.day { 
 
    background:#0000ff; 
 
    padding:30px; 
 
    color:#fff; 
 
}
<script src="http://momentjs.com/downloads/moment.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<table> 
 
<tr> 
 
    <td> 
 
    <div class="day" href="" onclick="return getDate(2016 + /10/ + 2);"> 
 
     2 
 
    </div> 
 
    </td> 
 
    <td> 
 
    <div class="day" href="" onclick="return getDate(2016 + /10/ + 3);"> 
 
    3 
 
    </div> 
 
    </td><td id="tt-calendar-today"> 
 
    <div class="day" href="" onclick="return getDate(2016 + /10/ + 4);"> 
 
    4 
 
    </div> 
 
    </td><td> 
 
    <div class="day" href="" onclick="return getDate(2016 + /10/ + 5);"> 
 
    5 
 
    </div> 
 
    </td><td> 
 
    <div class="day" href="" onclick="return getDate(2016 + /10/ + 6);"> 
 
    6 
 
    </div> 
 
    </td><td> 
 
    <div class="day" href="" onclick="return getDate(2016 + /10/ + 7);"> 
 
    7 
 
    </div> 
 
    </td><td> 
 
    <div class="day" href="" onclick="return getDate(2016 + /10/ + 8);"> 
 
    8 
 
    </div> 
 
    </td> 
 
</tr> 
 
</table>

+1

什麼你想要做的是通過在此背景下,以你的GETDATE功能,然後你可以使用$()將這個元素包裝到jquery中,然後做一個.addClass()。看到這個答案的確切實現:http://stackoverflow.com/a/16404397/4987197 – mhodges

+0

好吧,所以我必須明確地通過'這',我想我仍然可以傳遞我的日期字符串作爲第二個參數...現在就試試,謝謝你的評論。 –

+1

請注意'2016 +/10/+ 4'實際上是將一個數字添加到正則表達式的.toString()(它恰好是'/ 10 /')。你應該引用'/ 10 /'。哦,當你在這裏時,請不要使用onclick =的習慣。它永遠不是正確的工具。 –

回答

1

首先,DIV標籤不能有href屬性。其次,什麼是連接你的日期的需要,例如2016 + /10/ + 2?爲什麼不只是做2016/10/2

無論如何,而不是使用onclick屬性,使用jQuery的click method附加事件處理程序。另外,爲了傳遞自定義信息,我們還將使用HTML5 data-attribute

它看起來如下:

HTML

<div class="day" data-date="2016/10/2">2</div> 

的JavaScript

$('.day').click(function() { 
    var dateToday = moment(); 
    var selectedDate = moment($(this).data('date')); 

    // this refers to the DIV, so we need to move one level up to get the related TD 

    if (selectedDate.isBefore(dateToday, 'day')) { 
     $(this).closest('td').addClass('day-expired'); 
    } else { 
     $(this).closest('td').addClass('day-selected'); 
    } 
}); 
+0

Hi Mikey,真的很感謝這裏的答案......我將codeigniter中Calendar類生成的變量的日期連接起來,並認爲我有混淆了連接的順序......感謝您指出了這一點! –

+0

絕對的輝煌,我沒有想到使用數據屬性,但我認爲這是非常標準的做法,在大多數瀏覽器中都是安全可靠的。現在去測試一切。對不起,粗略的代碼! –

+0

哦,它很漂亮。像魅力一樣工作,簡化了我的代碼......非常感謝! –