Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.01.2020, 11:29
Профессор
Отправить личное сообщение для savsoft Посмотреть профиль Найти все сообщения от savsoft
 
Регистрация: 03.01.2019
Сообщений: 162

Работа с датами и таблицами.
Есть форма с таблицей

<form name="MyForm" id="myform" method="post" action="">
			<table name="tablename" id="tablename" class="table table-striped table-bordered">
				<thead>
					<tr>
						<th>Id</th>
						<th>Name</th>
						<th>Дата</th>
						<th>Action</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>1</td>
						<td>Company 1</td>
						<td>
							<input type="date" name="eventdate1" id="ed1" value="">
						</td>
						<td>
							<button class="btn btn-info" onclick="Calc()">Вычислить</button>
						</td>
					</tr>
					<tr>
						<td>2</td>
						<td>Company 2</td>
						<td>
							<input type="date" name="eventdate2" id="ed2" value="">
						</td>
						<td>
							<button class="btn btn-info" onclick="Calc()">Вычислить</button>
						</td>
					</tr>					
				</tbody>
			</table>
		</form>


По нажатию на кнопку Вычислить, необходимо взять дату из текущей строки, определить ее день недели и вычислить все дальнейшие даты, с таким же днем недели в том же месяце. Например, ввели 11.12.19, это среда в декабре 2019, нужно вычислить 18.12.19 и 25.12.19, то есть еще две среды.Если выбрана последняя среда месяца, то выбрать все среды следующего месяца. Но я застрял на самом первом этапе, определении текущей даты.
<script>
		function Calc() {
			var CliDate = $(this).closest('tr').children('td:eq(2)').text();  
            //var currentRow = $(this).closest("tr");
			//var CliDate    = currentRow.find("td:eq(2)").text();
			alert(CliDate);
			return true;
		}
	</script>

Толкните в нужную сторону, пожалуйста.
Ответить с цитированием
  #2 (permalink)  
Старый 04.01.2020, 12:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

savsoft,
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
$(function() {
   function getDates(date)
   {  var arr = [date];
      date = new Date(date);
      var days = 7;
      date.setDate(date.getDate()  + days);
      var month = date.getMonth();
      while (date.getMonth() == month) {
          arr.push(dateFormat(date))
          date.setDate(date.getDate()  + days);
      }
      return arr;
   }
   function dateFormat(date)
   {
      return date.toISOString().replace(/T.+$/, "")
   }
   $("tr").on("click", ".btn-info", function(event) {
   event.preventDefault();
   var parent = event.delegateTarget;
   var CliDate = $("[type='date']", parent).val();
   console.log(CliDate, getDates(CliDate))
})
});
  </script>
</head>
<body>
<form name="MyForm" id="myform" method="post" action="">
			<table name="tablename" id="tablename" class="table table-striped table-bordered">
				<thead>
					<tr>
						<th>Id</th>
						<th>Name</th>
						<th>Дата</th>
						<th>Action</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>1</td>
						<td>Company 1</td>
						<td>
							<input type="date" name="eventdate1" id="ed1" value="">
						</td>
						<td>
							<button class="btn btn-info" >Вычислить</button>
						</td>
					</tr>
					<tr>
						<td>2</td>
						<td>Company 2</td>
						<td>
							<input type="date" name="eventdate2" id="ed2" value="">
						</td>
						<td>
							<button class="btn btn-info" >Вычислить</button>
						</td>
					</tr>
				</tbody>
			</table>
		</form>

</body>
</html>

Последний раз редактировалось рони, 04.01.2020 в 14:32.
Ответить с цитированием
  #3 (permalink)  
Старый 04.01.2020, 13:17
Профессор
Отправить личное сообщение для savsoft Посмотреть профиль Найти все сообщения от savsoft
 
Регистрация: 03.01.2019
Сообщений: 162

Сообщение от рони Посмотреть сообщение
рони,
Почему-то у меня всегда берется дата с первой строки, а не той, где нажата кнопка.
Ответить с цитированием
  #4 (permalink)  
Старый 04.01.2020, 14:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

savsoft,
строка 29 исправлена, смотрите код снова.
Ответить с цитированием
  #5 (permalink)  
Старый 04.01.2020, 14:57
Профессор
Отправить личное сообщение для savsoft Посмотреть профиль Найти все сообщения от savsoft
 
Регистрация: 03.01.2019
Сообщений: 162

Сообщение от рони Посмотреть сообщение
savsoft,
строка 29 исправлена, смотрите код снова.
Да, спасибо, все работает. Только я начинаю разбираться с javascript, а jquery вообще только начало. Ваш код не совсем понятен для меня. Как лучше, начиная со следующей строки, после строки, в которой нажата кнопка, присвоить датам значения со второго элемента массива дат, пока не закончится массив или не закончатся строки?
Ответить с цитированием
  #6 (permalink)  
Старый 04.01.2020, 15:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Сообщение от savsoft
Как лучше,
можно пример html, что хотите получить?
Ответить с цитированием
  #7 (permalink)  
Старый 04.01.2020, 15:38
Профессор
Отправить личное сообщение для savsoft Посмотреть профиль Найти все сообщения от savsoft
 
Регистрация: 03.01.2019
Сообщений: 162

Сообщение от рони Посмотреть сообщение
можно пример html, что хотите получить?
Пример тот же

<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
		$(function() {
		   function getDates(date)
		   {  var arr = [date];
			  date = new Date(date);
			  var days = 7;
			  date.setDate(date.getDate()  + days);
			  var month = date.getMonth();
			  while (date.getMonth() == month) {
				  arr.push(dateFormat(date))
				  date.setDate(date.getDate()  + days);
			  }
			  return arr;
		   }
		   function dateFormat(date)
		   {
			  return date.toISOString().replace(/T.+$/, "")
		   }
		   $("tr").on("click", ".btn-info", function(event) {
		   event.preventDefault();
		   var parent = event.delegateTarget;
		   var CliDate = $("[type='date']", parent).val();
		   alert(CliDate);
		   console.log(CliDate, getDates(CliDate))
		})
		});
  </script>
</head>
<body>
<form name="MyForm" id="myform" method="post" action="">
			<table name="tablename" id="tablename" class="table table-striped table-bordered">
				<thead>
					<tr>
						<th>Id</th>
						<th>Name</th>
						<th>Дата</th>
						<th>Action</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>1</td>
						<td>Company 1</td>
						<td>
							<input type="date" name="eventdate1" id="ed1" value="">
						</td>
						<td>
							<button class="btn btn-info" >Вычислить</button>
						</td>
					</tr>
					<tr>
						<td>2</td>
						<td>Company 2</td>
						<td>
							<input type="date" name="eventdate2" id="ed2" value="">
						</td>
						<td>
							<button class="btn btn-info" >Вычислить</button>
						</td>
					</tr>
					<tr>
						<td>3</td>
						<td>Company 3</td>
						<td>
							<input type="date" name="eventdate3" id="ed3" value="">
						</td>
						<td>
							<button class="btn btn-info" >Вычислить</button>
						</td>
					</tr>
					<tr>
						<td>4</td>
						<td>Company 4</td>
						<td>
							<input type="date" name="eventdate4" id="ed4" value="">
						</td>
						<td>
							<button class="btn btn-info" >Вычислить</button>
						</td>
					</tr>
					<tr>
						<td>5</td>
						<td>Company 5</td>
						<td>
							<input type="date" name="eventdate5" id="ed5" value="">
						</td>
						<td>
							<button class="btn btn-info" >Вычислить</button>
						</td>
					</tr>
				</tbody>
			</table>
		</form>

</body>
</html>


В этом примере после нужно получить результат getDates(CliDate), и если введена дата, например во второй строке и нажата кнопка соответственно во второй строке - заполнить следующие строки (3. 4 и т.д.) пока на закончатся элементы массива или строки. То есть мы вводим в какой-либо строке дату, например эта дата вторник, то следующие строки заполняем датами следующих вторников текущего месяца. Если выбран последний вторник в месяце - то вторниками следующего месяца. Пока не закончатся даты в массиве или строки в таблице.
Ответить с цитированием
  #8 (permalink)  
Старый 04.01.2020, 15:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

savsoft,
не понимаю.
Ответить с цитированием
  #9 (permalink)  
Старый 04.01.2020, 16:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

savsoft,
возможно вы хотели так
<!DOCTYPE html>
<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
    </style>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script>
        $(function() {
           function getDates(date)
           {  var arr = [];
              date = new Date(date);
              if(!date) return arr;
              var days = 7;
              date.setDate(date.getDate()  + days);
              var month = date.getMonth();
              while (date.getMonth() == month) {
                  arr.push(dateFormat(date))
                  date.setDate(date.getDate()  + days);
              }
              return arr;
           }
           function dateFormat(date)
           {
              return date.toISOString().replace(/T.+$/, "")
           }
           $("tr").on("click", ".btn-info", function(event) {
           event.preventDefault();
           var parent = event.delegateTarget;
           var CliDate = $("[type='date']", parent).val();
           var arrDate = getDates(CliDate);
           $(parent).nextAll().find("[type='date']").val(function(i, v) {

         return arrDate[i] === void 0? v : arrDate[i];
})
        })
        });
    </script>
</head>
<body>
<form name="MyForm" id="myform" method="post" action="">
            <table name="tablename" id="tablename" class="table table-striped table-bordered">
                <thead>
                    <tr>
                        <th>Id</th>
                        <th>Name</th>
                        <th>Дата</th>
                        <th>Action</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>1</td>
                        <td>Company 1</td>
                        <td>
                            <input type="date" name="eventdate1" id="ed1" value="">
                        </td>
                        <td>
                            <button class="btn btn-info" >Вычислить</button>
                        </td>
                    </tr>
                    <tr>
                        <td>2</td>
                        <td>Company 2</td>
                        <td>
                            <input type="date" name="eventdate2" id="ed2" value="">
                        </td>
                        <td>
                            <button class="btn btn-info" >Вычислить</button>
                        </td>
                    </tr>
                    <tr>
                        <td>3</td>
                        <td>Company 3</td>
                        <td>
                            <input type="date" name="eventdate3" id="ed3" value="">
                        </td>
                        <td>
                            <button class="btn btn-info" >Вычислить</button>
                        </td>
                    </tr>
                    <tr>
                        <td>4</td>
                        <td>Company 4</td>
                        <td>
                            <input type="date" name="eventdate4" id="ed4" value="">
                        </td>
                        <td>
                            <button class="btn btn-info" >Вычислить</button>
                        </td>
                    </tr>
                    <tr>
                        <td>5</td>
                        <td>Company 5</td>
                        <td>
                            <input type="date" name="eventdate5" id="ed5" value="">
                        </td>
                        <td>
                            <button class="btn btn-info" >Вычислить</button>
                        </td>
                    </tr>
                </tbody>
            </table>
        </form>

</body>
</html>
Ответить с цитированием
  #10 (permalink)  
Старый 04.01.2020, 19:07
Профессор
Отправить личное сообщение для savsoft Посмотреть профиль Найти все сообщения от savsoft
 
Регистрация: 03.01.2019
Сообщений: 162

рони,

Проверил, вроде работает как нужно. Буду теперь разбирать, что каждая строчка значит в вашем скрипте.

Огромное спасибо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с таблицами SKLNSK jQuery 0 25.01.2016 09:58
виджет, только сторона клиента (JS, JQUery, работа с датами, масштабирование) eugen35 Работа 4 31.07.2014 09:50
работа с календарными датами join Javascript под браузер 5 10.08.2012 16:44
Работа с датами и временем RazZzeR Элементы интерфейса 0 26.07.2012 19:14
Работа с датами gibigate Общие вопросы Javascript 1 19.06.2012 12:51