Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.03.2015, 13:46
Интересующийся
Отправить личное сообщение для hack3p Посмотреть профиль Найти все сообщения от hack3p
 
Регистрация: 26.03.2015
Сообщений: 10

Помощь с таблицей
Здравствуйте, потихоньку осваиваю JS.
Пытаюсь сделать живое редактирование таблицы, однако данный скрипт преобразует оба <td> в input, а нужно, чтобы только второй <td> преобразовался. Пожалуйста помогите

Пример:

<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>


Заранее спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 26.03.2015, 15:04
Аспирант
Посмотреть профиль Найти все сообщения от newuser1001
 
Регистрация: 24.03.2015
Сообщений: 92

<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>
Ответить с цитированием
  #3 (permalink)  
Старый 26.03.2015, 15:21
Интересующийся
Отправить личное сообщение для hack3p Посмотреть профиль Найти все сообщения от hack3p
 
Регистрация: 26.03.2015
Сообщений: 10

newuser1001, Спасибо большое!
А как сейчас забирать данные из "editable"?

Если например будет вот такой вариант
<td class="editable 1">2</td>

Где: 1 - id предмета, 2 - оценка

Т.е. на выходе мы получаем
id = 1;
rate = 2;

Заранее спасибо!

Последний раз редактировалось hack3p, 26.03.2015 в 15:25.
Ответить с цитированием
  #4 (permalink)  
Старый 26.03.2015, 15:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

hack3p,
редактирование таблицы
Ответить с цитированием
  #5 (permalink)  
Старый 26.03.2015, 15:33
Аспирант
Посмотреть профиль Найти все сообщения от newuser1001
 
Регистрация: 24.03.2015
Сообщений: 92

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>
Ответить с цитированием
  #6 (permalink)  
Старый 26.03.2015, 16:17
Интересующийся
Отправить личное сообщение для hack3p Посмотреть профиль Найти все сообщения от hack3p
 
Регистрация: 26.03.2015
Сообщений: 10

newuser1001 и рони Большое спасибо!

Сделал вот такой вариант, однако 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>
Ответить с цитированием
  #7 (permalink)  
Старый 26.03.2015, 16:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

id.innerHTML - id у вас, это значение атрибута, а разве может это значение иметь содержимое?

var id = $(obj);
        console.log(id.id);
        console.log(id.innerHTML);
Ответить с цитированием
  #8 (permalink)  
Старый 26.03.2015, 16:34
Аспирант
Посмотреть профиль Найти все сообщения от newuser1001
 
Регистрация: 24.03.2015
Сообщений: 92

Я 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>
Ответить с цитированием
  #9 (permalink)  
Старый 26.03.2015, 17:54
Интересующийся
Отправить личное сообщение для hack3p Посмотреть профиль Найти все сообщения от hack3p
 
Регистрация: 26.03.2015
Сообщений: 10

newuser1001 спасибо!

Однако теперь Ajax не отправляет данные)
Хотя в консоли страницу загружает (index.php) с ответом 200, но сам скрипт index.php не получает данные. Опять я чего-то поломал

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, 26.03.2015 в 17:56.
Ответить с цитированием
  #10 (permalink)  
Старый 26.03.2015, 18:05
Аспирант
Посмотреть профиль Найти все сообщения от newuser1001
 
Регистрация: 24.03.2015
Сообщений: 92

hack3p,
Попробуйте переместить ф-цию с ajax в конец скрипта
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помощь по jquerry анимации rev27 Элементы интерфейса 6 23.04.2014 03:06
Нужна помощь по javascript darklend Общие вопросы Javascript 0 12.01.2014 23:33
Требуется помощь bboulevard Ваши сайты и скрипты 14 02.12.2013 17:47
Нужна помощь: Slider wheel Alex555 Мобильный JavaScript 0 15.05.2013 18:06
нужна помощь dominosoko Серверные языки и технологии 4 14.03.2010 02:17