Я разрабатываю одну таблицу в html, и она содержит time picker в одном td как время начала и второе средство выбора во втором td как время окончания в одном tr. Я хочу взять оба значения (время начала и время окончания) и хочу рассчитать разницу во времени и хочу показать в третьем td. Но я не могу получить конкретное значение td для расчета разницы.
<table id = "example1" class = "machinetable" cellspacing = "0" width = "100%">
<thead>
<tr>
<th>Sr. no.</th>
<th>Machine Name</th>
<th >Rate Type</th>
<th >Rate Unit</th>
<th >Rate</th>
<th >Start Time</th>
<th >End Time</th>
<th >Total Time</th>
</thead>
<tbody>
<tr role = "row" class = "odd">
<td>1</td>
<td>JCB</td>
<td>MH23GH5477</td>
<td>per Hour</td>
<td>1000</td>
<td>
<div class = "input-group"><input name = "start_time" value = "" class = "form-control form-cont datetime start_time" type = "text"><span class = "input-group-addon group-addon"><span><i class = "fa fa-clock-o" aria-hidden = "true"></i></span></span>
</div>
</td>
<td>
<div class = "form-group nomargin">
<div class = "input-group" ><input name = "end_time" value = "" onchange = "calculate_time(this.value)" class = "form-control form-cont datetime end_time" type = "text"><span class = "input-group-addon group-addon"><span><i class = "fa fa-clock-o" aria-hidden = "true"></i></span></span></div>
</div>
</td>
<td class = "total_time"></td>
</tr>
<tr role = "row" class = "odd">
<td>2</td>
<td>JCB</td>
<td>MH2398</td>
<td>per Hour</td>
<td>1000</td>
<td>
<div class = "input-group" ><input name = "start_time" value = "" class = "form-control form-cont datetime start_time" type = "text"><span class = "input-group-addon group-addon"><span><i class = "fa fa-clock-o" aria-hidden = "true"></i></span></span>
</div>
</td>
<td>
<div class = "form-group nomargin">
<div class = "input-group" ><input name = "end_time" value = "" onchange = "calculate_time(this.value)" class = "form-control form-cont datetime end_time" type = "text"><span class = "input-group-addon group-addon"><span><i class = "fa fa-clock-o" aria-hidden = "true"></i></span></span></div>
</div>
</td>
<td class = "total_time"></td>
</tr>
</tbody>
Функция Javascript:
function calculate_time(time)
{
var endtime1 = time;
var starttime1=
$(this).closest('td').prev('td').find("input[name=start_time]")val();
alert(starttime1);
alert(endtime1);
}
Получение ошибки:
start time undefined
Я новичок в js.
Спасибо всем за ответ ... но я все равно получаю ту же ошибку. Таблица, которую я использую, является датируемой.
Можете ли вы разработать jsfiddle, чтобы я мог его протестировать. Трудно восстановить проблему, которая зависит от сторонних инструментов, таких как jquery и средства выбора даты.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В вашем коде есть несколько проблем:
calculate_time(), чтобы вы могли использовать этот элемент для поиска других элементов рядом с ним. В настоящее время $(this) внутри calculate_time() ссылается на объект Window, а не на ваш фактический элемент.$(elem).closest('td').prev('td').find("input[name=start_time]").val() после передачи ссылки на элемент в функции calculate_time().Ниже приведен рабочий пример для получения значения start_time и end_time, вам все равно нужно интегрировать его с полями даты и рассчитать разницу после получения значения даты, используя приведенный ниже код:
function calculate_time(elem)
{
var endtime1 = elem.value;
var starttime1 = $(elem).closest('td').prev('td').find("input[name=start_time]").val();
alert(starttime1);
alert(endtime1);
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id = "example1" class = "machinetable" cellspacing = "0" width = "100%">
<thead>
<tr>
<th>Sr. no.</th>
<th>Machine Name</th>
<th >Rate Type</th>
<th >Rate Unit</th>
<th >Rate</th>
<th >Start Time</th>
<th >End Time</th>
<th >Total Time</th>
</thead>
<tbody>
<tr role = "row" class = "odd">
<td>1</td>
<td>JCB</td>
<td>MH23GH5477</td>
<td>per Hover</td>
<td>1000</td>
<td>
<div class = "input-group"><input name = "start_time" value = "" class = "form-control form-cont datetime start_time" type = "text"><span class = "input-group-addon group-addon"><span><i class = "fa fa-clock-o" aria-hidden = "true"></i></span></span>
</div>
</td>
<td>
<div class = "form-group nomargin">
<div class = "input-group" ><input name = "end_time" value = "" onchange = "calculate_time(this)" class = "form-control form-cont datetime end_time" type = "text"><span class = "input-group-addon group-addon"><span><i class = "fa fa-clock-o" aria-hidden = "true"></i></span></span></div>
</div>
</td>
<td class = "total_time"></td>
</tr>
<tr role = "row" class = "odd">
<td>2</td>
<td>JCB</td>
<td>MH2398</td>
<td>per Hover</td>
<td>1000</td>
<td>
<div class = "input-group" ><input name = "start_time" value = "" class = "form-control form-cont datetime start_time" type = "text"><span class = "input-group-addon group-addon"><span><i class = "fa fa-clock-o" aria-hidden = "true"></i></span></span>
</div>
</td>
<td>
<div class = "form-group nomargin">
<div class = "input-group" ><input name = "end_time" value = "" onchange = "calculate_time(this)" class = "form-control form-cont datetime end_time" type = "text"><span class = "input-group-addon group-addon"><span><i class = "fa fa-clock-o" aria-hidden = "true"></i></span></span></div>
</div>
</td>
<td class = "total_time"></td>
</tr>
</tbody>Поскольку вы используете ссылку на текущий элемент внутри функции, сначала передайте в функцию this вместо this.value. Вы также пропустили точку (.) перед val().
Теперь измените функцию следующим образом:
function calculate_time(time){
var endtime1 = time.value;
var starttime1= $(time).closest('td').prev('td').find('.start_time').val();
alert(starttime1);
alert(endtime1);
}
function calculate_time(time){
var endtime1 = time.value;
var starttime1= $(time).closest('td').prev('td').find('.start_time').val();
alert(starttime1);
alert(endtime1);
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id = "example1" class = "machinetable" cellspacing = "0" width = "100%">
<thead>
<tr>
<th>Sr. no.</th>
<th>Machine Name</th>
<th >Rate Type</th>
<th >Rate Unit</th>
<th >Rate</th>
<th >Start Time</th>
<th >End Time</th>
<th >Total Time</th>
</thead>
<tbody>
<tr role = "row" class = "odd">
<td>1</td>
<td>JCB</td>
<td>MH23GH5477</td>
<td>per Hour</td>
<td>1000</td>
<td>
<div class = "input-group"><input name = "start_time" value = "" class = "form-control form-cont datetime start_time" type = "text"><span class = "input-group-addon group-addon"><span><i class = "fa fa-clock-o" aria-hidden = "true"></i></span></span>
</div>
</td>
<td>
<div class = "form-group nomargin">
<div class = "input-group" ><input name = "end_time" value = "" onchange = "calculate_time(this)" class = "form-control form-cont datetime end_time" type = "text"><span class = "input-group-addon group-addon"><span><i class = "fa fa-clock-o" aria-hidden = "true"></i></span></span></div>
</div>
</td>
<td class = "total_time"></td>
</tr>
<tr role = "row" class = "odd">
<td>2</td>
<td>JCB</td>
<td>MH2398</td>
<td>per Hour</td>
<td>1000</td>
<td>
<div class = "input-group" ><input name = "start_time" value = "" class = "form-control form-cont datetime start_time" type = "text"><span class = "input-group-addon group-addon"><span><i class = "fa fa-clock-o" aria-hidden = "true"></i></span></span>
</div>
</td>
<td>
<div class = "form-group nomargin">
<div class = "input-group" ><input name = "end_time" value = "" onchange = "calculate_time(this)" class = "form-control form-cont datetime end_time" type = "text"><span class = "input-group-addon group-addon"><span><i class = "fa fa-clock-o" aria-hidden = "true"></i></span></span></div>
</div>
</td>
<td class = "total_time"></td>
</tr>
</tbody>Передайте еще один параметр при вызове такой функции onchange = "calculate_time (this.value, '1')" где 1 - это идентификатор start_time как показано ниже
<input name = "start_time" id = "start_time1" value = "" class = "form-control form-cont datetime start_time" type = "text">
тогда ваша функция будет выглядеть так:
<script>
function calculate_time(time, id)
{
//alert(id);
var endtime1 = time;
var starttime1= $("#start_time"+id).val();
alert(endtime1);
alert(starttime1);
}
</script>
Надеюсь, это поможет!
Попробуй это здесь нет проверки.
<table id = "example1" class = "machinetable" cellspacing = "0" width = "100%">
<thead>
<tr>
<th>Sr. no.</th>
<th>Machine Name</th>
<th >Rate Type</th>
<th >Rate Unit</th>
<th >Rate</th>
<th >Start Time</th>
<th >End Time</th>
<th >Total Time</th>
</thead>
<tbody>
<tr role = "row" class = "odd">
<td>1</td>
<td>JCB</td>
<td>MH23GH5477</td>
<td>per Hour</td>
<td>1000</td>
<td>
<div class = "input-group">
<input name = "start_time" value = "" class = "form-control form-cont datetime start_time" type = "text" id = "time_a_1">
<span class = "input-group-addon group-addon"><span><i class = "fa fa-clock-o" aria-hidden = "true"></i></span></span>
</div>
</td>
<td>
<div class = "form-group nomargin">
<div class = "input-group" >
<input name = "end_time" value = "" onkeyup = "calculate_time(1)" class = "form-control form-cont datetime end_time" type = "text" id = "time_a_2">
<span class = "input-group-addon group-addon"><span><i class = "fa fa-clock-o" aria-hidden = "true"></i></span></span></div>
</div>
</td>
<td class = "total_time" id = "time_a"></td>
</tr>
<tr role = "row" class = "odd">
<td>2</td>
<td>JCB</td>
<td>MH2398</td>
<td>per Hour</td>
<td>1000</td>
<td>
<div class = "input-group" >
<input name = "start_time" value = "" class = "form-control form-cont datetime start_time" type = "text" id = "time_b_1">
<span class = "input-group-addon group-addon"><span><i class = "fa fa-clock-o" aria-hidden = "true"></i></span></span>
</div>
</td>
<td>
<div class = "form-group nomargin">
<div class = "input-group" >
<input name = "end_time" value = "" onkeyup = "calculate_time(2)" class = "form-control form-cont datetime end_time" type = "text" id = "time_b_2">
<span class = "input-group-addon group-addon"><span><i class = "fa fa-clock-o" aria-hidden = "true"></i></span></span></div>
</div>
</td>
<td class = "total_time" id = "time_b"></td>
</tr>
</tbody>
<script>
function calculate_time(time)
{
if (time == 1){
start_time = document.getElementById("time_a_1").value
end_time = document.getElementById("time_a_2").value
total = start_time + end_time
document.getElementById("time_a").innerText = total;
}
else if (time == 2){
start_time = document.getElementById("time_b_1").value
end_time = document.getElementById("time_b_2").value
total = start_time + end_time
document.getElementById("time_b").innerText = total;
}
}
</script>
Вам не хватает точки после поиска