Как я могу создать сортируемый, изменяемый, добавляемый, удаляемый элемент веб-страницы? - PullRequest
2 голосов
/ 16 ноября 2010

Я создаю интерфейс веб-приложения, который позволит пользователям составлять предложения, нажимая на слова / фразы.Каждое слово фразы будет содержаться в своем собственном элементе страницы, например.<div>.Таким образом, класс div должен позволять:

  • перетаскивать в другом порядке относительно других divs / слов (т.е. сортировать)
  • a X (отображается только при наведении курсора)в правом верхнем углу окна, чтобы полностью удалить его при нажатии
  • изменение шрифта / текста при действиях по нажатию
  • будет вставлено на страницу, когда пользователь желает добавить другое слово

Например, представьте, что это страница (кавычки обозначают элемент):

" Привет, меня зовут " [Textbox] "Я работаюat ... "" и я родился в"[Combobox]

Фраза, выделенная курсивом,« неактивна »и не является частью предложения, но если пользователь щелкнулзатем он изменится на " Я работаю на " [Текстовое поле], и будет добавлен новый div, например.« А также на ... » для дальнейшего расширения.Фразы, выделенные жирным шрифтом, будут иметь кнопку закрытия / кликабельное действие, чтобы избавиться от них или сделать их снова неактивными.Также они будут перетаскивать, чтобы изменить порядок.Как вы видите, мне также нужно было бы динамически вставлять новые текстовые поля и комбинированные списки, чтобы вместить больше фраз, требующих ввода.

Может кто-нибудь дать мне краткий обзор того, какие шаги мне нужно предпринять?Я видел сортируемые элементы списка в JQuery, например.http://jsfiddle.net/ctrlfrk/A4K4t/ что является началом.Должен ли я просто украсить это некоторыми базовыми JavaScript и CSS?Или мне нужно было бы использовать сценарии на стороне сервера для динамического добавления дополнительного содержимого страницы?

Подводя итог, мне нужно, чтобы div изменял шрифт / текст при нажатии, имел кнопку закрытия при наведении курсора, удалял и вставлялна простых событиях щелчка, и быть сортируемым, перетаскивая.Мне также нужно, чтобы комбинированные списки / текстовые поля были добавлены / удалены параллельно.

Любые советы будут с благодарностью.

Ответы [ 2 ]

0 голосов
/ 16 ноября 2010

Сортировка: Я хотел бы реализовать фразы в неупорядоченном списке (ul), что делает его так просто, как

$("#ulId").sortable();

Вы можете размещать элементы ul / li рядом друг с другом аналогично тому, как вы делаете горизонтальные навигационные меню из элементов ul.

Кнопка вызова: Просто используйте шаблон li, похожий на этот

<li id="text1Wrapper">
   <span id="text1" 
     onmouseover="javascript:$('text1Remove').fadeIn();"
     onmouseout="javascript:$('text1Remove').fadeOut();"
     onclick="javascript:$('text1Content').
       replaceWith(
         $(document.createElement('input'))
           .attr('type','text')
           .val($('text1Content').text())
       );">
      <span id="text1Content">Text Here</span>
      <img id="text1Remove" 
        style="display: none;" 
        src="./x.jpg" alt="Remove" 
        onclick="javascript:$(this).parent().remove();" 
      />
   </span>
</li>

Краткое описание: Событие span over mouse указывает на исчезновение jquery с помощью кнопки удаления (поэтому при наведении курсора кнопка удаления становится доступной).

Событие span mouse out указывает jquery на исчезновение кнопки удаления, когда она больше не нужна (поэтому, когда вы убираете мышь из li, кнопка удаления больше не видна)

При щелчке по диапазону диапазон заменяется текстовым полем, содержащим содержимое диапазона. Я оставлю «сохранить изменения» в качестве упражнения для читателя, поскольку по сути это то же самое, но в обратном порядке.

Стиль тега Img имеет отображение: нет, чтобы скрыть его изначально. По сути, это конечный продукт fadeOut (), но без затухания.

Событие нажатия кнопки «Удалить» получает родительский объект (li) и удаляет его, а также всех дочерних элементов из домена.

Обратите внимание, что события помещены здесь только потому, что это казалось логичным местом, чтобы объяснить это. Все события во внешнем теге SPAN - бесполезная трата пространства, так как все они будут переопределены, когда мы клонируем узел в следующем разделе.

Вставка на страницу: Все, что вам нужно сделать сейчас, это

var cloneLi = $('#text1Wrapper').clone();
cloneLi.attr('id', 'text2Wrapper');
var cloneSpan = cloneLi.children('#text1').attr('id', 'text2');
var cloneContent = cloneSpan.children('#text1Content').attr('id', 'text2Content');
var cloneRemove = cloneSpan.children('#text1Remove').attr('id', 'text2Remove');

Затем вам нужно будет изменить функции mouseover, mouseout и onclick внешнего диапазона, используя события jquery:

cloneSpan.mouseover(function(e) {
   // Insert functionality from template here
});
cloneSpan.mouseout(function(e) {
   // Insert functionality from template here
});
cloneSpan.click(function(e) {
   // Insert functionality from template here
});
0 голосов
/ 16 ноября 2010

Вам не нужен сервер для нового контента, пока он не будет сохранен или сгенерирован там.

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

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

Что касается вашего описания поведения пользовательского интерфейса, вы говорите, что неактивные элементы можно перетаскивать и что их можно сделать активными, нажав на них,Вы можете сделать это (просто посмотрите, была ли эта вещь перетащена или нет при наведении мыши, чтобы узнать, была ли она перетащена или нажата), но это может быть не лучшим выбором дизайна пользовательского интерфейса, IMO.Это не было бы худшей вещью в мире, но я немного расстраиваюсь, когда происходит что-то неправильное, когда я пытаюсь что-то сделать.Конечно, лучше всего реализовывать и видеть самим.

...