Thread View: pl.comp.lang.javascript
1 messages
1 total messages
Started by jivanmuktaWYTNIJTO
Fri, 29 Jan 2010 14:36
problem z kalendarzem http://javascriptkit.com/script/script2/timestamp.shtml
Author: jivanmuktaWYTNIJTO
Date: Fri, 29 Jan 2010 14:36
Date: Fri, 29 Jan 2010 14:36
167 lines
8659 bytes
8659 bytes
Dzień dobry,
Moja strona to raport-tabelka, który ma parametry-inputy.
<form name="params" action="announcements.php" method="POST">
...
<tr>
<td><label>Przedział czasowy wprowadzenia ogłoszenia</label>:</td>
<td>
od <input type="text" id="date_submitted_from" name="date_submitted_from"
<?php echo errorClass('date_submitted_from'); ?> maxlength="10" style="width:
10ex" value="<?php echo valueFromRequest('date_submitted_from'); ?>"
onblur="validateDate(this, 'date_submitted_from_error');">
<a href="javascript:show_calendar('document.params.date_submitted_from',
document.params.date_submitted_from.value);"><img src="../images/cal.gif"
width="16" height="16" style="border: 0" alt="Kalendarz"></a>
- do <input type="text" id="date_submitted_to" name="date_submitted_to" <?php
echo errorClass('date_submitted_to'); ?> maxlength="10" style="width: 10ex"
value="<?php echo valueFromRequest('date_submitted_to'); ?>"
onblur="validateDate(this, 'date_submitted_to_error');">
<a href="javascript:show_calendar('document.params.date_submitted_to',
document.params.date_submitted_to.value);"><img src="../images/cal.gif"
width="16" height="16" style="border: 0" alt="Kalendarz"></a>
<span class="tip">format: np. <i><?php echo date('Y.m.d'); ?></i></span>
<span id="date_submitted_from_error" class="error_message"></span>
<span id="date_submitted_to_error" class="error_message"></span>
<?php echo validationError('date_submitted_from'),
validationError('date_submitted_to'); ?>
</td>
</tr>
przy czym funkcje PHP to:
string errorClass(string $field) - ewentualnie zaznacz kontrolkę jako
zawierającą błędna wartość do poprawienia przez użytkownika
string valueFromRequest(string $field) - wartość pola do przywrócenia
string validationError - pokaż błąd walidacji, jeśli jest
a funkcje JavaScript to:
validateDate(elem, id_error) - sprawdź czy kontrolka zawiera datę
show_calendar(str_target, str_datetime) - funkcja wyświetla popup-kalendarz i
umieszcza datę w str_target
Problem polega na tym, że o ile dla parametru raportu date_submitted_to funkcja
show_calendar po wybraniu daty z kalenarzyka umieszcza go w
input#date_submitted_to, to dla paremetru raportu date_submitted_from funkcja
show_calendar poprawnie wyświetla kalendarz ale już nie kopiuje wybranej daty do
pola input#date_submitted_from. Nie wiem dlaczego.
Pakiet kalendarza można ściągnąć z
http://javascriptkit.com/script/script2/timestamp.shtml. Oto definicja funkcji
show_calendar po przetłumaczeniu na polski:
function show_calendar(str_target, str_datetime) {
var arr_months = ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec",
"Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"];
var week_days = ["Nd", "Po", "Wt", "Śr", "Cz", "Pt", "So"];
var n_weekstart = 1; // day week starts from (normally 0 or 1)
var dt_datetime = (str_datetime == null || str_datetime =="" ? new Date() :
str2dt(str_datetime));
var dt_prev_month = new Date(dt_datetime);
dt_prev_month.setMonth(dt_datetime.getMonth()-1);
var dt_next_month = new Date(dt_datetime);
dt_next_month.setMonth(dt_datetime.getMonth()+1);
var dt_firstday = new Date(dt_datetime);
dt_firstday.setDate(1);
dt_firstday.setDate(1-(7+dt_firstday.getDay()-n_weekstart)%7);
var dt_lastday = new Date(dt_next_month);
dt_lastday.setDate(0);
// html generation (feel free to tune it for your particular application)
// print calendar header
var str_buffer = new String (
"<html>\n"+
"<head>\n"+
" <title>Kalendarz</title>\n"+
"</head>\n"+
"<body bgcolor=\"White\">\n"+
"<table class=\"clsOTable\" cellspacing=\"0\" border=\"0\" width=\"100%\">\n"+
"<tr><td bgcolor=\"#4682B4\">\n"+
"<table cellspacing=\"1\" cellpadding=\"3\" border=\"0\" width=\"100%\">\n"+
"<tr>\n <td bgcolor=\"#4682B4\"><a
href=\"javascript:window.opener.show_calendar('"+
str_target+"', '"+ dt2dtstr(dt_prev_month)+"');\">"+
"<img src=\"prev.gif\" width=\"16\" height=\"16\" border=\"0\""+
" alt=\"previous month\"></a></td>\n"+
" <td bgcolor=\"#4682B4\" colspan=\"5\">"+
"<font color=\"white\" face=\"tahoma, verdana\" size=\"2\">"
+arr_months[dt_datetime.getMonth()]+"
"+dt_datetime.getFullYear()+"</font></td>\n"+
" <td bgcolor=\"#4682B4\" align=\"right\"><a
href=\"javascript:window.opener.show_calendar('"
+str_target+"', '"+dt2dtstr(dt_next_month)+"');\">"+
"<img src=\"next.gif\" width=\"16\" height=\"16\" border=\"0\""+
" alt=\"next month\"></a></td>\n</tr>\n"
);
var dt_current_day = new Date(dt_firstday);
// print weekdays titles
str_buffer += "<tr>\n";
for (var n=0; n<7; n++)
str_buffer += " <td bgcolor=\"#87CEFA\">"+
"<font color=\"white\" face=\"tahoma, verdana\" size=\"2\">"+
week_days[(n_weekstart+n)%7]+"</font></td>\n";
// print calendar table
str_buffer += "</tr>\n";
while (dt_current_day.getMonth() == dt_datetime.getMonth() ||
dt_current_day.getMonth() == dt_firstday.getMonth()) {
// print row heder
str_buffer += "<tr>\n";
for (var n_current_wday=0; n_current_wday<7; n_current_wday++) {
if (dt_current_day.getDate() == dt_datetime.getDate() &&
dt_current_day.getMonth() == dt_datetime.getMonth())
// print current date
str_buffer += " <td bgcolor=\"#FFB6C1\" align=\"right\">";
else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
// weekend days
str_buffer += " <td bgcolor=\"#DBEAF5\" align=\"right\">";
else
// print working days of current month
str_buffer += " <td bgcolor=\"white\" align=\"right\">";
if (dt_current_day.getMonth() == dt_datetime.getMonth())
// print days of current month
str_buffer += "<a href=\"javascript:window.opener."+str_target+
".value='"+dt2dtstr(dt_current_day)+"'; window.close();\">"+
"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";
else
// print days of other months
str_buffer += "<a href=\"javascript:window.opener."+str_target+
".value='"+dt2dtstr(dt_current_day)+"'; window.close();\">"+
"<font color=\"gray\" face=\"tahoma, verdana\" size=\"2\">";
str_buffer += dt_current_day.getDate()+"</font></a></td>\n";
dt_current_day.setDate(dt_current_day.getDate()+1);
}
// print row footer
str_buffer += "</tr>\n";
}
// print calendar footer
str_buffer +=
"<form name=\"cal\">\n<tr><td colspan=\"7\" bgcolor=\"#87CEFA\">"+
"<font color=\"White\" face=\"tahoma, verdana\" size=\"2\">"+
"</font></td></tr>\n</form>\n" +
"</table>\n" +
"</tr>\n</td>\n</table>\n" +
"</body>\n" +
"</html>\n";
var vWinCal = window.open("", "Kalendarz",
"width=200,height=250,status=no,resizable=yes,top=200,left=200");
vWinCal.opener = self;
var calc_doc = vWinCal.document;
calc_doc.write (str_buffer);
calc_doc.close();
}
Jak widać każda komórka kalendarza z dniem zawiera kod JavaScript, który kopiuje
datę dnia do okna nadrzędnego (do pola input#date_submitted_... formularza):
str_buffer += "<a href=\"javascript:window.opener."+str_target+
".value='"+dt2dtstr(dt_current_day)+"'; window.close();\">"+
"<font color=\"black\" face=\"tahoma, verdana\" size=\"2\">";
Np. kiedy w okienku kalendarza najadę myszką na dzień 2010.10.29 to widzę w
linii stanu napis:
javascript:window.opener.document.params.date_submitted_from.value='2010.10.29';window.close();
Nie rozumiem dlaczego w tej sytuacji data nie pojawia się w
input#date_submitted_from.
Proszę o podpowiedź. Z góry dziękuję.
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads