2013-04-24 2 views
6

Я не уверен, что это называется, но я хочу, чтобы иметь возможность щелкнуть, например. a div, содержащий номер, а затем он будет меняться во входное текстовое поле со значением, которое я нажимаю.Как отредактировать данные onclick

Затем я хочу отредактировать номер и нажать (onblur event), и он вернется к div, из текстового поля, показывающего новый отредактированный номер. Номер также был бы обновлен в базе данных через ajax.

Что называется эта функция?
Каков наилучший способ закодировать это?

+0

рядный редактирования или _edit в place_ – Ejaz

ответ

2

Это называется редактирование jQuery на месте. Для этого есть ряд плагинов, доступных из jQuery.

+2

Он квалифицируется как вопрос JQuery! – vinaynag

+0

извините за это - мой плохой – Lix

1

Вы уже назвали весь процесс.

Сначала назначьте все ваши номера или поля некоторым классом.

<div class="editable">value</div> 

Затем присвойте этому классу событие click.

$('.editable').click(function(){ 
//replace element with input element containing the value 
//attach an onblur event to the new element 
$(newelement).blur(function(){ 
    //use $.ajax to send the element's value to your server 
    //remove the input element and then replace the previous element with the new value 
}); 
}); 
2

Почему не просто остаться с одним полем ввода, а также изменять стили полей на стираться. Вы можете отнять все, чтобы он не выглядел как вход, таким образом, нет необходимости менять туда и обратно. Сделайте вызов Ajax размытым.

+0

Это хорошая идея, она все равно может обновить db через ajax onblur, а также правильно? – Source

+0

Да, просто присоедините обработчик событий .blur (.ajax ....) – nick

14

Вы можете сделать следующее:

Есть событие щелчка и создать текстовое поле на лету, который принимает текст внутри DIV в качестве значения.

Имеет пятно, даже который связывается с этим текстовым полем и делает вызов AJAX и в его успехе изменить текст Div

позволяет сказать, что ваш HTML, как:

<div id="fullname">Amazing Spider man</div> 

И ваш код JS будет быть как:

$('#fullname').click(function(){ 
    var name = $(this).text(); 
    $(this).html(''); 
    $('<input></input>') 
     .attr({ 
      'type': 'text', 
      'name': 'fname', 
      'id': 'txt_fullname', 
      'size': '30', 
      'value': name 
     }) 
     .appendTo('#fullname'); 
    $('#txt_fullname').focus(); 
}); 

$(document).on('blur','#txt_fullname', function(){ 
    var name = $(this).val(); 
    $.ajax({ 
     type: 'post', 
     url: 'change-name.xhr?name=' + name, 
     success: function(){ 
     $('#fullname').text(name); 
     } 
    }); 
}); 

Это продемонстрировало, в этом jsfiddle

+0

Это самый простой способ сделать это. Но для лучшего пользовательского опыта вы можете заменить '$ ('# txt_fullname'). Focus();' с '$ (" # txt_fullname "). Focus(). Val (" "). Val (name);' to move сфокусируйтесь рядом со значением ввода. – RydelHouse

+0

Вместо 'blur', как вы используете' enter'? –

+2

любая идея, почему входное значение очищается от фокуса? –

0

Все изменилось. HTML5 имеет атрибут contentEditable с уже довольно хорошей поддержкой браузера, поэтому вы можете сначала изучить это, особенно если вы хотите сделать no-jquery.

Простое размещение contentEditable = true в div сделает его доступным и редактируемым (основной текст). Вы можете настроить базового слушателя и подать обновление в массив, готовый для сохранения через ajax. More info here.

Кроме того, here's a plugin, который принимает его и дает больше элементов управления WYSIWYG для этих полей.

В любом случае, вот пример кода, нет плагинов, нет JQuery:

var editable = document.getElementById('myContent'); 
 
editable.addEventListener('input', function() { 
 
    console.log('An edit input has been detected'); 
 
});
<div id="myContent" contentEditable=true>This is a paragraph. Click to make it editable.</div>

Смежные вопросы