13.04.2015, 13:37
|
Интересующийся
|
|
Регистрация: 10.04.2015
Сообщений: 12
|
|
theKingOfJava,
Да, что-то похожее на это. Не думал, что так просто это можно сделать.
Спасибо за ответ.
|
|
13.04.2015, 16:02
|
Интересующийся
|
|
Регистрация: 10.04.2015
Сообщений: 12
|
|
Yuliya1121,
Все будем миллионерами.
|
|
13.04.2015, 17:17
|
Интересующийся
|
|
Регистрация: 10.04.2015
Сообщений: 12
|
|
theKingOfJava,
Вопрос: можно на html страничке выпадающий список максимально сократить (убрать option), задав в javascript массив элементов списка и "привязав" его к select?
К примеру, создать скрипт, где все option будут объявлены в одной новой переменной?
|
|
13.04.2015, 18:37
|
Кандидат Javascript-наук
|
|
Регистрация: 31.03.2015
Сообщений: 113
|
|
<html>
<head>
</head>
<body>
<select id="s"></select>
<script>
opts=[1,2,3,5]
opts.forEach(function(x){s.appendChild(new Option(x))})
</script>
</body>
</html>
|
|
13.04.2015, 18:42
|
Интересующийся
|
|
Регистрация: 10.04.2015
Сообщений: 12
|
|
Огромное спасибо)
|
|
14.04.2015, 19:27
|
Интересующийся
|
|
Регистрация: 10.04.2015
Сообщений: 12
|
|
Доброго времени суток, уважаемые программисты. К вам есть очередной вопрос: есть следующий код, работает все как хотел. Но появилась еще одна мысль, реализовать которую не хватает ума. Скажем, добавили мы нового пользователя, указали дату регистрации и ее окончания.
Можно ли в последнюю колонку "Period" вывести, скажем, значок решетки, при нажатии на которую появится всплывающее окошко (alert), где будет указано количество дней, оставшихся до окончания регистрации выбранного пользователя. Другими словами, от значения Expiration будет отниматься Registration, и на выходе мы получим определенное количество дней.
Просто объявить переменные и отнимать от одной другую - глупая идея, и ничего здесь не выйдет (может я ошибаюсь, но вряд ли). Мне кажется, с этим кодом это сделать не выйдет, т.к. яваскрипт вряд ли вобще понимает, что в наших ячейках есть даты..
<html>
<head>
</head>
<body>
<p><table id="t" width="1250" cellspacing="1" cellpadding="2" style="border: 1px solid black">
<tr>
<td>ID</td>
<td>Full Name</td>
<td>Reading Hall</td>
<td>Registration</td>
<td>Expiration Date</td>
<td>Period</td>
</tr>
</table></p>
<fieldset>
<legend>New Reader</legend> <label>Reader`s ID</label> <input id="ID"/> <button id="genID">generate id</button>
<p><label>Full Name</label> <input id="fullName" /></p>
<label>Reading Hall</label> <select id="RH">
<option>Financial</option>
<option>Computers/IT</option>
<option>Science Fiction</option>
<option selected>--Select reading hall--</option>
</select>
<p><label>Registration date</label> <input id="D"/> <select id="M"></select> <select id="Y"></select> </p>
<p><label>Expiration date</label> <input id="D2"/> <select id="M2"></select> <select id="Y2"></select> </p>
<p> <button id="AddReader">Add reader to table</button></p>
</fieldset>
<script>
genID.onclick=function(){
ID.value=Math.floor(Math.random()*20)
}
AddReader.onclick=function(){
var row=t.insertRow()
row.insertCell().innerHTML=ID.value
row.insertCell().innerHTML=fullName.value
row.insertCell().innerHTML=RH.value
row.insertCell().innerHTML=D.value+" "+M.value+" "+Y.value
row.insertCell().innerHTML=D2.value+" "+M2.value+" "+Y2.value
}
opts1=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
opts1.forEach(function(x){M.appendChild(new Option(x))})
opts2=["2005","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017","2018","2019","2020","2021","2022","2023","2024","2025"]
opts2.forEach(function(z){Y.appendChild(new Option(z))})
opts1_2=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
opts1_2.forEach(function(x){M2.appendChild(new Option(x))})
opts2_2=["2015","2016","2017","2018","2019","2020","2021","2022","2023","2024","2025"]
opts2_2.forEach(function(k){Y2.appendChild(new Option(k))})
</script>
</body>
</html>
|
|
14.04.2015, 20:35
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сервер хранит регистрацию, так что ему трудно выдать готовое - количество дней ее окончания? И это можно получить уже sql-запросом.
А уж как показать, сразу ли, или в окошечке, это как нравится. Зачем возлагать на клиента задачи, которые не имеют смысла?
|
|
14.04.2015, 21:49
|
Интересующийся
|
|
Регистрация: 10.04.2015
Сообщений: 12
|
|
Это задачка скорее для общего развития, не более. На практике этот код вряд ли будет где-то использоваться.
Изучаю html, js, css несколько недель, следовательно, знаний не очень много.
Было бы очень интересно посмотреть, как приведенную выше задумку можно реализовать.
Буду благодарен за любые советы/ответы.
Последний раз редактировалось |Alexxx|#, 14.04.2015 в 23:39.
|
|
15.04.2015, 03:17
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Понятно. Ну так решать задачи нужно привязанные к реалиям, а не нечто пространное. Сервер будет хранить дату регистрации как DATETIME. Окончании регистрации при этом хранить не нужно серверу, ему необходимо в таком случае хранить установленный период в днях. По этим двум параметрам можно получить и дату окончания, и проверить скоро ли она наступит, и отправить письмо пользователю за день до ее окончания. Для этого и SQL, и серверный язык имеют набор функций для работы с датой/временем.
JS не исключение, в нем тоже есть инструментарий для подобных операций - объект Date. В реальности сервер вернул бы дату регистрации и ее период определенный конфигураций, а никак не набор месяцев и годов как у вас представлено. Посредством объекта Date и нужно производить расчет на клиенте.
Но данные типа дата/время, это особый тип, который еще связан и с пространством даже а рамках шарика нашего. Сайт будет работать по времени сервера для всех пользователей, включая и тех кто западнее его, и кто восточнее. Если клиенту передать время регистрации, которое соответствует времени сервера, то расчеты на клиенте будут верны только для тех пользователей, у которых часовой пояс равен поясу определенному для сервера. А для клиентов со смещением от него будет ошибка, и чем далее смещение, тем грубее ошибка, в смысле рассчитанного периода.
Чтобы этой ошибки не возникало, клиент должен производить расчеты по времени клиента, а сервер для этого должен отдавать клиенту не локальное время регистрации, а ее UTC представление. Есть еще один способ, это передача клиенту времени регистрации по локальному времени сервера и смещение временной зоны сервера (от GMT). У сервера смещение к западу будет отрицательными, а к востоку положительными, на клиенте наоборот - к востоку отрицательные, к западу положительные. Разница смещения сервера и клиента позволит получить на клиенте как локальное время, так и отображать время и сервера.
Вот такие задачи решать, и не с абстрактными цифрами напоминающими год, а с временными метками и посредством объекта Date, это была бы польза. А набор цифр и названий месяцев, было бы уместно для задачи "Календарь", хотя и для него нужны были бы только названия месяцев, для локализации.
|
|
15.04.2015, 17:59
|
Кандидат Javascript-наук
|
|
Регистрация: 31.03.2015
Сообщений: 113
|
|
<html>
<head>
</head>
<body>
<p><table id="t" width="1250" cellspacing="1" cellpadding="2" style="border: 1px solid black">
<tr>
<td>ID</td>
<td>Full Name</td>
<td>Reading Hall</td>
<td>Registration</td>
<td>Expiration Date</td>
<td>Period</td>
</tr>
</table></p>
<fieldset>
<legend>New Reader</legend> <label>Reader`s ID</label> <input id="ID"/> <button id="genID">generate id</button>
<p><label>Full Name</label> <input id="fullName" /></p>
<label>Reading Hall</label> <select id="RH">
<option>Financial</option>
<option>Computers/IT</option>
<option>Science Fiction</option>
<option selected>--Select reading hall--</option>
</select>
<p><label>Registration date</label> <input id="D"/> <select id="M"></select> <select id="Y"></select> </p>
<p><label>Expiration date</label> <input id="D2"/> <select id="M2"></select> <select id="Y2"></select> </p>
<p> <button id="AddReader">Add reader to table</button></p>
</fieldset>
<script>
genID.onclick=function(){
ID.value=Math.floor(Math.random()*20)
}
AddReader.onclick=function(){
var row=t.insertRow()
row.insertCell().innerHTML=ID.value
row.insertCell().innerHTML=fullName.value
row.insertCell().innerHTML=RH.value
var r_date=D.value, r_month=M.value, r_year=Y.value, e_date=D2.value, e_month=M2.value, e_year=Y2.value
row.insertCell().innerHTML=r_date+" "+r_month+" "+r_year
row.insertCell().innerHTML=e_date+" "+e_month+" "+e_year
var per=row.insertCell()
per.innerHTML="#"
var regDate=new Date(r_year, opts1.indexOf(r_month), r_date).getTime(),
expDate=new Date(e_year, opts1.indexOf(e_month), e_date).getTime(),
theTime=(expDate-regDate)/86400000
per.onclick=function(){alert(theTime)}
}
opts1=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
opts1.forEach(function(x){M.appendChild(new Option(x))})
opts2=["2005","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017","2018","2019","2020","2021","2022","2023","2024","2025"]
opts2.forEach(function(z){Y.appendChild(new Option(z))})
opts1_2=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
opts1_2.forEach(function(x){M2.appendChild(new Option(x))})
opts2_2=["2015","2016","2017","2018","2019","2020","2021","2022","2023","2024","2025"]
opts2_2.forEach(function(k){Y2.appendChild(new Option(k))})
</script>
</body>
</html>
|
|
|
|