#javascript #html #jquery #ajax #codeigniter
#javascript #HTML #jquery #ajax #codeigniter
Вопрос:
Я работаю над простой системой администрирования. Теперь я хочу упростить редактирование данных администратором. Моя цель состоит в том, чтобы при двойном щелчке по элементу он менялся на input. Затем после редактирования, если администратор нажимает за пределами входных данных, он запускает событие для запуска ajax. Это похоже на систему в phpMyAdmin, когда мы хотим отредактировать данные, просто дважды щелкните на данных.
HTML
<tbody>
<tr>
<th scope="row">1</th>
<td class="editable" name="email">myname@myweb.com</td>
<td class="editable" name="username">this_is_username</td>
<td class="editable" name="name">My Name</td>
</tr>
</tbody>
JavaScript
$(".editable").dblclick(function () {
const id = $(this).data("id");
const col = $(this).attr("name");
$(this).html(
"<form>
<input class="editing" type='text' value='" $(this).val() "'>
</form>"
);
});
// I want this Ajax will execute whene other side is clicked
$.ajax({
url: "http://localhost/myProject/myController/myMethod",
type: "post",
data: {
id: id,
col: col,
value: $('.editing').val()
},
success: function () {
document.location.href = "http://localhost/myProject/myController";
},
});
Контроллер
public function myMethod()
{
$id = $this->input->post("id");
$col = $this->input->post("col");
$value = $this->input->post("value");
$this->db->set($col, $val);
$this->db->where('id', $id);
$this->db->update("my_table");
}
Но я не знаю, как создать событие для выполнения Ajax при щелчке администратора за пределами ввода. Кто-нибудь может мне помочь? Или была сделана функция?
*** Примечание: Я хочу исключить его из привязки тега. Итак, при нажатии на какую-либо ссылку не выполняется Ajax, а осуществляется переход по ссылке.
Ответ №1:
Используйте событие onblur элемента ввода. Оно срабатывает, когда пользователь отвлекается от поля ввода.
Ответ №2:
Поскольку вы используете jQuery, подключите событие on blur, вот так:
$(".editable").dblclick(function () {
const id = $(this).data("id");
const col = $(this).attr("name");
$(this).html(
"<form>
<input class="editing" type='text' value='" $(this).val() "'>
</form>"
);
// use more specific targets here, i just use the class of the input
// you should use the same $(this) content in the end
$('.editing').blur(function() {
$.ajax({
url: "http://localhost/myProject/myController/myMethod",
type: "post",
data: {
id: id,
col: col,
value: $('.editing').val()
},
success: function () {
document.location.href = "http://localhost/myProject/myController";
},
});
});
});
Событие размытия запускается, когда элемент, к которому вы его прикрепили, теряет фокус, но не запускается пузырьками, только для определенного элемента.
Найдите дополнительную информацию для размытия или, возможно, для фокусировки
Комментарии:
1. Может ли .blur () создать исключение для тега привязки?
2. Что вы подразумеваете под «создать исключение» для привязки?? Я не уверен, как вы хотите с ними обращаться, но главное — понять используемые вами селекторы и имеющиеся у вас элементы. Объясните немного лучше, и я, возможно, смогу немного помочь
3. Я вижу, и я получил то, что искал