Помощь с таблицей
Здравствуйте, потихоньку осваиваю JS.
Пытаюсь сделать живое редактирование таблицы, однако данный скрипт преобразует оба <td> в input, а нужно, чтобы только второй <td> преобразовался. Пожалуйста помогите:help: :-? Пример: <td>Математика</td> <td> 5 </td> <td>Математика</td> <td><input type="text" value=5></td>
(function(){
var table = document.getElementById('edit');
for (var i = 0; i < table.tBodies[0].rows.length; i++) {
var row = table.tBodies[0].rows[i];
row.onclick = onRowClick;
}
function onRowClick(event) {
var target = event ? event.target : window.event.srcElement;
this.onclick = null;
this.className = 'editable';
for (var i = 0; i < this.cells.length i++) {
var cell = this.cells[i];
var input = document.createElement('input');
input.setAttribute('type', cell.getAttribute('data-type') || 'text');
input.value = cell.firstChild.data;
dump(input.value);
cell.replaceChild(input, cell.firstChild);
if (cell == target)
input.focus();
}
}
})();
<table id="edit"> <thead> <tr> <td> <b>Предмет</b> </td> <td> <b>Оценка</b> </td> </tr> </thead> <tbody> <td> Алгебра </td> <td> 4 </td> <td> Русский </td> <td> 4 </td> <td> Литература </td> <td> 4 </td> <td> Химия </td> <td> 4 </td> </tbody> </table> Заранее спасибо! |
<html>
<head>
<style>
.editable{
width: 50px;
height: 20px;
border: 1px solid black
}
</style>
</head>
<body>
<table>
<tr>
<td><div class="editable"></td>
<td><div class="editable"></td>
</tr>
<tr>
<td><div class="editable"></td>
<td><div class="editable"></td>
</tr>
</table>
<script>
;[].forEach.call(document.querySelectorAll(".editable"), function(x){x.contentEditable="true"})
</script>
</body>
</html>
|
newuser1001, Спасибо большое!:victory:
А как сейчас забирать данные из "editable"? Если например будет вот такой вариант <td class="editable 1">2</td> Где: 1 - id предмета, 2 - оценка Т.е. на выходе мы получаем id = 1; rate = 2; Заранее спасибо! |
|
hack3p,
Забирайте как обычно, это же обычный HTML-элемент. Например
<html>
<head>
<style>
.editable{
width: 50px;
height: 20px;
border: 1px solid black
}
</style>
</head>
<body>
input some text:
<div class="editable" id="src">foo</div>
<br>
<button id="show">show</button>
<br>
result:
<br>
<div id="info" ></div>
<script>
;[].forEach.call(document.querySelectorAll(".editable"), function(x){x.contentEditable="true"})
show.onclick=function(){
info.innerHTML=src.innerHTML
}
</script>
</body>
</html>
|
newuser1001 и рони Большое спасибо!:victory:
Сделал вот такой вариант, однако console.log(id.innerHTML); пишет undefined. Что я не правильно сделал?:)
$(document).ready(function() {
$('.editable').click(function() {
getId(this);
});
});
function getId(obj)
{
var id = $(obj).attr('id');
console.log(id);
console.log(id.innerHTML);
}
<td class="editable" id="n">5</td> |
id.innerHTML - id у вас, это значение атрибута, а разве может это значение иметь содержимое?
var id = $(obj);
console.log(id.id);
console.log(id.innerHTML);
|
Я jq толком не знаю. На js можно так
<html>
<head>
</head>
<body>
<table>
<tr>
<td class="editable" id="n">5</td>
</tr>
</table>
<script>
get=function(){console.log(this.id, this.innerHTML)}
;[].forEach.call(document.querySelectorAll(".editable"), function(el){el.onclick=get})
</script>
</body>
</html>
|
newuser1001 спасибо!:victory:
Однако теперь Ajax не отправляет данные) Хотя в консоли страницу загружает (index.php) с ответом 200, но сам скрипт index.php не получает данные. Опять я чего-то поломал:yes: Console.log выводит все переменные, т.е. они не пустые во время отправки
// Добавляем оценки по предметам
addSubjects = function()
{
var id = this.id;
var rate = this.innerHTML;
var page = "PersonalPage";
var action = "addSubjects";
console.log(id, rate, page, action);
$.ajax
(
{
type: "POST",
url: "form.php",
dataType: "html",
data: "page="+page+
"&action="+action+
"&id="+id+
"&rate="+rate,
success: function(response)
{
// выводим
$("#content").append(html);
}
}
);
}
;[].forEach.call
(
document.querySelectorAll(".editable"),
function(x)
{
x.contentEditable="true"
}
)
;[].forEach.call
(
document.querySelectorAll(".editable"),
function(y)
{
y.onclick=addSubjects
}
)
|
hack3p,
Попробуйте переместить ф-цию с ajax в конец скрипта |
| Часовой пояс GMT +3, время: 12:50. |