Как изменить span на input с помощью javascript
Привет,
Я разрабатываю приложение, и у меня есть некоторые проблемы. Мне нужно чтобы увидеть результат, но php POST нужно ввести поле ввода, когда я изменяю для ввода JavaScript не работает и не показывает результат в поле ввода, а затем все должно идти в базу данных.
Мой HTML-код с полем ввода:
<tbody> <tr> <td><input type="time" class="form-control form-control-sm" id="start" name="darb_work"></td> <td><input type="time" class="form-control form-control-sm" id="end" name="darb_finish"></td> <td><input type="text" class="form-control form-control-sm" id="diff" name="darb_result"></td> </tr> </tbody>
HTML-код поле занимать :
<tbody> <tr> <td><input type="time" class="form-control form-control-sm" id="start" name="darb_work"></td> <td><input type="time" class="form-control form-control-sm" id="end" name="darb_finish"></td> <td><span type="time" class="form-control form-control-sm" id="diff" name="darb_result"></td> </tr> </tbody>
Мой PHP код:
if (isset($_POST['create_darb'])) { $darb_title = escape($_POST['title']); $darb_user = escape($_POST['darb_user']); $darb_status = escape($_POST['darb_status']); $darb_content = escape($_POST['darb_content']); $darb_date = escape(date('d-m-y')); $darb_fileUpload = escape($_FILES['darb_fileUpload']['name']); $darb_fileUpload_temp = escape($_FILES['darb_fileUpload']['tmp_name']); $darb_work = escape($_POST['darb_work']); $darb_finish = escape($_POST['darb_finish']); $darb_result = escape($_POST['darb_result']); move_uploaded_file($darb_fileUpload_temp, "../uploads/$darb_fileUpload"); $query = "INSERT INTO darb(darb_title, darb_user, darb_date, darb_content, darb_status, darb_fileUpload, darb_work, darb_finish, darb_result) "; $query .= "VALUES('{$darb_title}','{$darb_user}',now(),'{$darb_content}','{$darb_status}','{$darb_fileUpload}', '{$darb_work}','{$darb_finish}','{$darb_result}')"; $create_darb_query = mysqli_query($connection, $query); confirmQuery($create_darb_query); $the_darb_id = mysqli_insert_id($connection);
код JavaScript:
// Hour Auto calculate $('#hours input').on('keyup change',function () { differenceHours.diff_hours('start', 'end', 'diff'); });
Больше кода Javascript :
var DifferenceHours = function(options){ /* * Variables * in the class */ const vars = { first_hour_split: null, second_hour_split: null, $el: null }; /* * Can access this.method * inside other methods using * _this.method() */ let _this = this; /* * Constructor */ this.construct = function (options) { $.extend(vars , options); }; /* * PUBLIC */ this.diff_hours = function (time1, time2, result) { vars.first_hour_split = $('#' + time1).val().split(':'); vars.second_hour_split = $('#' + time2).val().split(':'); vars.$el = $('#' + result); let hours; let minute; if (parseInt(vars.first_hour_split[0]) < parseInt(vars.second_hour_split[0]) && parseInt(vars.first_hour_split[1]) < parseInt(vars.second_hour_split[1])) { //As for the addition, the subtraction is carried out separately, column by column. hours = parseInt(vars.second_hour_split[0]) - parseInt(vars.first_hour_split[0]); minute = parseInt(vars.second_hour_split[1]) - parseInt(vars.first_hour_split[1]); let _hours = ''; let _minute = ''; if (hours < 10) { _hours ='0' + hours; } else { _hours = hours; } if (minute < 10) { _minute = '0' + minute; } else { _minute = minute; } vars.$el.text(_hours + 'h' + _minute + 'm') }else if (parseInt(vars.second_hour_split[0]) > parseInt(vars.first_hour_split[0])) { if (parseInt(vars.second_hour_split[1]) < parseInt(vars.first_hour_split[1])) { // As before we subtract column by column ... and we realize that it's impossible because our minute in second hour is greater than our minute in first hour // We will transform 1 hour in 60 minutes let _hours = parseInt(vars.second_hour_split[0]) - 1; let _minute = parseInt(vars.second_hour_split[1]) + 60; let final_hours = ''; let final_min = ''; hours = _hours - parseInt(vars.first_hour_split[0]); minute = _minute - parseInt(vars.first_hour_split[1]); if (hours < 10) { final_hours = '0' + hours; } else { final_hours = hours; } if (minute < 10) { final_min = '0' + minute; } else { final_min = minute; } vars.$el.text(final_hours + 'H' + final_min) } if (parseInt(vars.second_hour_split[1]) === parseInt(vars.first_hour_split[1])) { hours = parseInt(vars.second_hour_split[0]) - parseInt(vars.first_hour_split[0]); let final_hours = ''; if (hours < 10) { final_hours = '0' + hours; } else { final_hours = hours; } vars.$el.text(final_hours + 'H' + '00') } }else if (parseInt(vars.first_hour_split[0]) > parseInt(vars.second_hour_split[0])) { let first_hour_only_hour = parseInt(vars.first_hour_split[0]); let second_hour_only_hour = parseInt(vars.second_hour_split[0]); let first_hour_only_min = parseInt(vars.first_hour_split[1]); let second_hour_only_min = parseInt(vars.second_hour_split[1]); let tmp_hour = 24 - first_hour_only_hour; let tmp_ttl_hour = tmp_hour + second_hour_only_hour; let tmp_ttl_min = first_hour_only_min + second_hour_only_min; let tmp_new_hour = 0; let tmp_new_min_mod = 0; let _hours = ''; let _min = ''; if (tmp_ttl_min > 59) { tmp_new_hour = parseInt(tmp_ttl_min/60); tmp_new_min_mod = tmp_ttl_min%60; tmp_ttl_hour += tmp_new_hour; } else { tmp_new_min_mod = tmp_ttl_min } if (tmp_ttl_hour < 10) { _hours = '0' + tmp_ttl_hour; } else { _hours = tmp_ttl_hour } if (tmp_new_min_mod < 10) { _min = '0' + tmp_new_min_mod } else { _min = tmp_new_min_mod } vars.$el.text(_hours + 'H' + _min) } else if (parseInt(vars.first_hour_split[0]) === parseInt(vars.second_hour_split[0])) { hours = '00'; let minute = 0; if (parseInt(vars.first_hour_split[1]) < parseInt(vars.second_hour_split[1])) { minute = parseInt(vars.second_hour_split[1]) - parseInt(vars.first_hour_split[1]); } if (minute < 10) { vars.$el.text(hours + 'H0' + minute) } else { vars.$el.text(hours + 'H' + minute) } }else if (parseInt(vars.first_hour_split[0]) === 0 && parseInt(vars.first_hour_split[1]) === 0) { hours = parseInt(vars.second_hour_split[0]); minute = parseInt(vars.second_hour_split[1]); if (hours === 0) { vars.$el.text('00H' + minute) }else if (minute === 0){ if (hours < 10) { vars.$el.text('0' + hours + 'H00'); }else { vars.$el.text(hours + 'H00'); } }else { vars.$el.text(hours + 'H' + minute) } } }; /* END PUBLIC FUNCTION */ this.construct(options); }; const differenceHours = new DifferenceHours();
Что я уже пробовал:
Я перепробовал много советов в интернете, но не смог решить эту проблему.
MadMyche
А javascript-это где?
Matas - developer
Добавлен
F-ES Sitecore
Что делает "differenceHours.diff_hours"?
Matas - developer
Это javascript-файл, который вычисляет время ввода 1 и ввода 2 и показывает результат, может быть, в файле differenceHours.diff есть проблема?
F-ES Sitecore
Проблема будет заключаться в этом коде. Вы обновляете входные данные, устанавливая свойство value ("val()" при использовании jQuery), но span, устанавливая свойство innerHTML ("html()" при использовании jQuery), так что этот код необходимо будет изменить.
Matas - developer
Я добавил еще код. Спасибо за ваш ответ
F-ES Sitecore
Вы используете .text, так что это должно быть нормально для обновления диапазона. Там много кода, Вы должны использовать отладку (на стороне сервера и на стороне клиента), чтобы шагнуть через то, что делает код, чтобы увидеть, когда он перестает делать то, что вы ожидаете.
Matas - developer
Большое вам спасибо!
Richard Deeming
vars.$el.text(...)
Как сказал F-ES, вы пытаетесь установить внутренний текст элемента. Это не работает с входными данными; вам нужно использовать
vars.$el.val(...)
вместо..text() | jQuery API документация[^]
.val() | документация по API jQuery[^]
Matas - developer
Большое вам спасибо!
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк / интерполяцию для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
PHP: SQL-инъекция - руководство пользователя[^]
Matas - developer
Спасибо за Ваше мнение, я исправлю эту проблему