2013-09-30 5 views
0

Итак, у меня есть страница, которую я хочу использовать, чтобы пользователи могли видеть, что в настоящее время находится в базе данных, и редактировать их, нажав на поле. У меня есть довольно хакерский метод, который работает для текстовых вменений, но для раскрывающегося списка или селектора даты полностью разваливается. моего HTMLКак создать редактируемый вход в событие click

<td name='joineddate133'> 
    <input type='date' 
    id='joind133' 
    name='joinda133 
    value='2012-03-15' 
    class='toedit' 
    readonly='readonly' 
    onclick='enablejoindate(this.id)' 
    size='20' /> 
    < /td> 

Текущего Javascript класс

<script> 
function enablejoindate(joindatid){ 
    $(function(){ 
    $("input:text[id="+ joindatid +"]").removeAttr("class"); 
    $("input:text[id="+ joindatid +"]").removeAttr("readonly"); 
    $("input:text[id="+ joindatid +"]").addClass("inlineditjoind"); 
    }); 
    } 
    </script> 

inlinedit используется в качестве маркеров, так что JQuery может найти его легко размещать и класс toedit в настоящее время только скрывает атрибуты.

Очевидно, что это решение не является большим, и я хотел бы попробовать и выработать лучший способ, возможно, создать вход на клик функции двойного и т.д.

+0

С выпадающего списка, как вы предполагаете, что пользователь добавит новый пункт меню? – ChrisW

+0

Я думал, что он просто будет существовать вместо текста, поэтому он выглядит от простого текста до ввода –

ответ

1

Вы можете иметь все поля, как неизменяемые и скрытые до сфокусированы:

$("table").on("focus", "input, select", function(){ 
    $(this) 
    .prop("readonly", false) 
    .removeClass("toedit"); 
}); 

$("table").on("blur", "input, select", function(){ 
    $(this) 
    .prop("readonly", true) 
    .addClass("toedit") 
    .siblings("span").text($(this).val()); 
}); 

$("table").on("click", "td", function(){ 
    $(this).children().focus(); 
}); 

DEMO (снова обновлен)

+0

Это буквально именно то, что я пытался сделать, это ближе всего к цели, которую я надеялся достичь. –

+0

Я обновил [demo] (http://jsfiddle.net/CyN2V/3/) еще раз, чтобы установить содержимое '' после того, как поле было обновлено. – Moob

+0

спасибо, это именно то, что я пытаюсь сделать, я не мог пройти мимо бит, где моя была уродливой и сломанной! –

1

Поскольку вы используете JQuery, используйте событие JQuery. Лучше всего установить readonly ложь с помощью метода prop():

$('input[type=date]').on('click', function(){ 
    $(this) 
     .removeClass("toedit") 
     .prop("readonly", false) 
     .addClass("inlineditjoind");  
}); 

JSFiddle

+0

спасибо за информацию о prop, почему это поддержка, а не addClass - это просто jquery? –

+0

[класс] (http://api.jquery.com/category/manipulation/class-attribute/) и [prop] (http://api.jquery.com/prop/) (свойство) являются двумя разными вещи. – George

+0

ах, это мой показ нообильности, вероятно, должен прочитать учебник или два –

1

Вы должны взглянуть на X-editable.

<a 
    href="#" 
    id="joinda133" 
    data-type="date" 
    data-viewformat="dd.mm.yyyy" 
    data-pk="1" 
    data-placement="right" 
    data-original-title="Date you've joined" 
>25.02.2013</a> 
+0

, которые кажутся действительно эффективными, но мне пришлось бы менять множество других функций, связанных с моим кодом, чтобы использовать его. Я буду иметь в виду, что в следующий раз нужно сделать что-то подобное, программирование с учетом этого с самого начала, вероятно, сэкономит мне время. –

1

Have a look to the DEMO JSFiddle

JS/JQuery -

$("#joind133").on('click',function(){ 
    $(this).removeProp("readonly") 
     .removeClass("toedit") 
     .addClass("inlineditjoind"); 
}); 

HTML -

<td name='joineddate133'> 
    <input type='date' id='joind133' name='joinda133' value='2012-03-15' class='toedit' readonly='readonly' size='20'/> 
</td> 

ОБНОВЛЕНИЕ ПО ЗАКАЗУ ДЛЯ ПРИНЯТИЯ ЕГО GENERIC ОБЯЗАТЕЛЬНОЕ

$("input[type='date']").on('click',function(){ 
    $(this).removeProp("readonly") 
     .removeClass("toedit") 
     .addClass("inlineditjoind"); 
}); 
+0

, который намного чище, чем мой код.Я все еще приспосабливаюсь к тому, как правильно писать jquery –

+0

. Самое важное изменение заключалось в использовании prop вместо attr для readonly. –

+0

Проблема с этим решением заключается в том, что я генерирую идентификатор на основе того, что находится в базе данных, поэтому существует 100 + атрибуты даты с разными идентификаторами, созданными во время выполнения. Мне нужен метод для запуска по универсальному атрибуту даты, который может быть вызван на любую нажатую дату, если вы видите, что я имею в виду –

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