#javascript #html #jquery
Вопрос:
Мне нужно очистить данные в HTML td onfocus, аналогично тому, как это работает при вводе HTML, но в редактируемой таблице, которая использует jQuery tabledit. Причина в том, что это таблица CRUD, и она заполняет таблицу данными из базы данных. Если я хочу отредактировать один из td, я не хочу удалять существующие данные, но, скорее, когда я нажимаю на td, значение устанавливается равным»», и я могу просто ввести новые данные.
<td><?php echo $row['payment_company']; ?></td>
Я попытался, как показано ниже, но он не устанавливает значение данных пустым
<td onfocus="this.value=''"><?php echo $row['payment_company']; ?></td>
Итак, это то, что я пытаюсь сделать эквивалентом:-
<input type='text' id='name' value = 'Hello' onfocus = 'this.value = ""' />
Обновление:
Потому что это не работает в моем коде здесь, сгенерированном HTML
с помощью инструментов разработчика браузера:
<td onclick="this.textContent='';" class="tabledit-view-mode">
<span class="tabledit-span">onclick textContent</span>
<input
class="tabledit-input form-control input-sm"
type="text"
name="payment_method"
value="onclick textContent"
style="display: none;"
disabled=""
>
</td>
Комментарии:
1.
focus
Событие не срабатывает поtd
элементам. Используйтеclick
вместо этого.2. @RoryMcCrossan Я бы сказал, что предоставление элемента
tabindex
заставит событие focus работать с указанным элементом, см. Документы дляtabindex
: html.spec.whatwg.org/multipage/interaction.html#attr-tabindex При перекрестной ссылке на документы для события focus w3c.github.io/uievents/#event-type-focus однако явно не упоминается, что фокусируемый элемент будет вызывать событие фокусировки.3. Хороший момент, однако добавление a
tabindex
по причинам, отличным от обеспечения доступности, не является хорошей практикой.
Ответ №1:
У A td
нет value
— вы могли бы использовать innerHTML
или textContent
вместо этого. Кроме focus
того, событие срабатывает, если вы даете элементу a tabindex
. В качестве альтернативы вы можете использовать click
событие.
Рабочий пример:
<table>
<td onfocus="this.innerHTML='';" tabindex="0">onfocus innerHTML / </td>
<td onfocus="this.textContent='';" tabindex="0">onfocus textContent</td>
<td onclick="this.innerHTML='';">onclick innerHTML / </td>
<td onclick="this.textContent='';">onclick textContent / </td>
</table>
Чтобы использовать jQuery-Tabledit, вам нужно выбрать сгенерированный дочерний ввод и очистить его значение. Вы могли бы сделать это встроенным:
<td onfocus="this.querySelector('input').value = '';" tabindex="0">inline</td>
или с помощью вызова функции:
<td onfocus="emptyCell(this);" tabindex="0">function</td>
function emptyCell(scope) {
$(scope).find('input').val('');
}
Рабочий пример:
$('#test-table').Tabledit({
editButton: false,
hideIdentifier: true,
columns: {
identifier: [0, 'id'],
editable: [[1, 'onfocus1'], [2, 'onfocus2'], [3, 'onclick1'], [4, 'onclick2']]
}
});
function emptyCell(scope) {
$(scope).find('input').val('');
}
.tabledit-remove-button {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://www.jqueryscript.net/demo/Creating-A-Live-Editable-Table-with-jQuery-Tabledit/jquery.tabledit.js"></script>
<table id="test-table">
<thead>
<tr>
<th>#</th>
<th>onfocus1</th>
<th>onfocus2</th>
<th>onclick1</th>
<th>onclick2</th>
</tr>
</thead>
<tbody>
<tr>
<td>row 1</td>
<td onfocus="this.querySelector('input').value = '';" tabindex="0">inline</td>
<td onfocus="emptyCell(this);" tabindex="0">function</td>
<td onclick="this.querySelector('input').value = '';">inline</td>
<td onclick="emptyCell(this);">function</td>
</tr>
</tbody>
</table>
Комментарии:
1. 3-й вариант onclick очищает данные в td, но удаляет возможность добавления новой информации, т. е. не может вводить новые данные в ячейку. Параметры onfocus не очищают данные, хотя я вижу, что они очищают их в вашем фрагменте.
2. К сожалению, параметры onclick очищают ячейку, но удаляют возможность создавать новый текст для обновления, т. е. ячейка больше не доступна для редактирования.
3. Теперь я удалил решение onclick. У вас есть такой html-фрагмент
td
, который отображается в браузере (см. в инструментах разработки)?4. <td onfocus=»this.textContent=»;» tabindex=»0″ class=»tabledit-edit-mode»><span class=»tabledit-span» style=»display: none;»>текстового содержимого</span><input class=»tabledit-input form-control input-sm» type=»text» name=»payment_method» value=»textContent» style=»»></td>
5. И функция onclick является/являлся следующим образом:- <td onclick=»this.textContent=’Please’;» class=»tabledit-view-mode»><span class=»tabledit-span»>onclick функции текстового содержимого</span><input class=»tabledit-input form-control input-sm» type=»text» name=»payment_method» value=»onclick textContent» style=»display: none;» disabled=»»></td>
Ответ №2:
Ты можешь это сделать. Это должно помочь В вашем html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>repl.it</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<table>
<tr>
<td onclick="erase()">we</td>
</tr>
</table>
<script src="script.js"></script>
</body>
</html>
В вашем script.js
function erase() {
event.target.innerHTML = ""
}