Как я могу создать доступный для редактирования dropdownlist в HTML?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

46
задан yoozer8 16 July 2012 в 17:33
поделиться

5 ответов

Лучший способ сделать это должно, вероятно, пользоваться сторонней библиотекой.

существует реализация того, что Вы ищете в jQuery UI и в додзе . jQuery более популярен, но додзе позволяет Вам декларативно определять виджеты в HTML, который звучит больше как то, что Вы ищете.

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

16
ответ дан rishad2m8 26 November 2019 в 20:02
поделиться

<select> тег только позволяет использование предопределенных записей. Стандартное решение Вашей проблемы должно иметь одну запись, маркировал 'Other' и отключенное поле (<input type="text") редактирования. Добавьте некоторый JavaScript для включения поля редактирования только, когда 'Другой' будет выбран.

может быть возможно так или иначе создать выпадающее, которое позволяет прямое редактирование, но IMO, который не стоит усилия. Если бы это было, Amazon, Google или Microsoft сделали бы его;-), Просто сделали задание с наименее сложным решением. Это как быстрее (Вашему боссу может понравиться это), и обычно легче поддержать (можно понравиться это).

8
ответ дан Treb 26 November 2019 в 20:02
поделиться

Я не уверен, что существует способ сделать это автоматически без JavaScript.

то, В чем Вы нуждаетесь, является чем-то, что работает на стороне браузера для представления формы назад серверу, когда они пользователь делают выбор - следовательно, JavaScript.

кроме того, удостоверьтесь, чтобы у Вас было альтернативное средство (т.е. кнопка отправки) для тех, кому выключили JavaScript.

А хороший пример: Средство просмотра Поля комбинированного списка

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

1
ответ дан Community 26 November 2019 в 20:02
поделиться

Поле комбинированного списка - к сожалению, что-то, что было упущено из спецификаций HTML.

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

1
ответ дан 26 November 2019 в 20:02
поделиться

HTML не имеет встроенного доступного для редактирования выпадающего списка или поля комбинированного списка, но я реализовал решение главным-образом-CSS в статья .

, Вы видите полную демонстрацию здесь , но таким образом, пишете HTML как это:

<span class="combobox withtextlist">
  <input value="Fruit">
  <span tabindex="-1" class="downarrow"></span>
  <select size="10" class="sticky">
    <option>Apple</option>
    <option>Banana</option>
    <option>Cherry</option>
    <option>Dewberry</option>
  </select>
</span>

И CSS использования как это для моделирования его (это разработано и для полей комбинированного списка, которые имеют кнопку стрелки вниз в-ѕ и выпадающие меню, которые открываются при нажатии и различный моделировании):

/* ------------------------------------------ */
/* ----- combobox / dropdown list styling     */
/* ------------------------------------------ */
.combobox {
  /* Border slightly darker than Chrome's <select>, slightly lighter than FireFox's */
  border: 1px solid #999;
  padding-right: 1.25em; /* leave room for ▾ */
}
.dropdown, .combobox { 
  /* "relative" and "inline-block" (or just "block") are needed
     here so that "absolute" works correctly in children */
  position: relative;
  display: inline-block;
}
.combobox > .downarrow, .dropdown > .downarrow {
  /* ▾ Outside normal flow, relative to container */
  display: inline-block;
  position: absolute;
  top: 0;
  bottom: 0;
  right: 0;
  width: 1.25em;

  cursor: default;
  nav-index: -1; /* nonfunctional in most browsers */

  border-width: 0px;          /* disable by default */
  border-style: inherit; /* copy parent border */
  border-color: inherit; /* copy parent border */
}
/* Add a divider before the ▾ down arrow in non-dropdown comboboxes */
.combobox:not(.dropdown) > .downarrow {
  border-left-width: 1px;
}
/* Auto-down-arrow if one is not provided */
.downarrow:empty::before {
  content: '▾';
}
.downarrow::before, .downarrow > *:only-child {
  text-align: center;

  /* vertical centering trick */
  position: relative;
  top: 50%;
  display: block; /* transform requires block/inline-block */
  transform: translateY(-50%);
}
.combobox > input {
  border: 0
}
.dropdown > *:last-child,
.combobox > *:last-child {
  /* Using `display:block` here has two desirable effects:
     (1) Accessibility: it lets input widgets in the dropdown to
         be selected with the tab key when the dropdown is closed. 
     (2) It lets the opacity transition work.
     But it also makes the contents visible, which is undesirable 
     before the list drops down. To compensate, use `opacity: 0`
     and disable mouse pointer events. Another side effect is that
     the user can select and copy the contents of the hidden list,
     but don't worry, the selected content is invisible. */
  display: block;
  opacity: 0;
  pointer-events: none;

  transition: 0.4s; /* fade out */
  position: absolute;
  left: 0;
  top: 100%;
  border: 1px solid #888;
  background-color: #fff;
  box-shadow: 1px 2px 4px 1px #666;
  box-shadow: 1px 2px 4px 1px #4448;
  z-index: 9999;
  min-width: 100%;
  box-sizing: border-box;
}
/* List of situations in which to show the dropdown list.
   - Focus dropdown or non-last child of it => show last-child
   - Focus .downarrow of combobox => show last-child
   - Stay open for focus in last child, unless .less-sticky
   - .sticky last child stays open on hover
   - .less-sticky stays open on hover, ignores focus in last-child */
.dropdown:focus > *:last-child,
.dropdown > *:focus ~ *:last-child,
.combobox > .downarrow:focus ~ *:last-child,
.combobox > .sticky:last-child:hover,
.dropdown > .sticky:last-child:hover,
.combobox > .less-sticky:last-child:hover,
.dropdown > .less-sticky:last-child:hover,
.combobox > *:last-child:focus:not(.less-sticky),
.dropdown > *:last-child:focus:not(.less-sticky) {
  display: block;
  opacity: 1;
  transition: 0.15s;
  pointer-events: auto;
}
/* focus-within not supported by Edge/IE. Unsupported selectors cause 
   the entire block to be ignored, so we must repeat all styles for 
   focus-within separately. */
.combobox > *:last-child:focus-within:not(.less-sticky),
.dropdown > *:last-child:focus-within:not(.less-sticky) {
  display: block;
  opacity: 1;
  transition: 0.15s;
  pointer-events: auto;
}
/* detect Edge/IE and behave if though less-sticky is on for all
   dropdowns (otherwise links won't be clickable) */
@supports (-ms-ime-align:auto) {
  .dropdown > *:last-child:hover {
    display: block;
    opacity: 1;
    pointer-events: auto;
  }
}
/* detect IE and do the same thing. */
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .dropdown > *:last-child:hover {
    display: block;
    opacity: 1;
    pointer-events: auto;
  }
}
.dropdown:not(.sticky) > *:not(:last-child):focus,
.downarrow:focus, .dropdown:focus {
  pointer-events: none; /* Causes second click to close */
}
.downarrow:focus {
  outline: 2px solid #8BF; /* Edge/IE can't do outline transparency */
  outline: 2px solid #48F8;
}

/* ---------------------------------------------- */
/* Optional extra styling for combobox / dropdown */
/* ---------------------------------------------- */
*, *:before, *:after {
  /* See https://css-tricks.com/international-box-sizing-awareness-day/ */
  box-sizing: border-box; 
}
.combobox > *:first-child {
  display: inline-block;
  width: 100%;
  box-sizing: border-box; /* so 100% includes border & padding */
}
/* `.combobox:focus-within { outline:...}` doesn't work properly 
   in Firefox because the focus box is expanded to include the 
   (possibly hidden) drop list. As a workaround, put focus box on 
   the focused child. It is barely-visible so that it doesn't look
   TOO ugly if the child isn't the same size as the parent. It
   may be uglier if the first child is not styled as width:100% */
.combobox > *:not(:last-child):focus {
  outline: 2px solid #48F8;
}
.combobox {
  margin: 5px; 
}

Вам также нужен некоторый JavaScript для синхронизации списка с текстовым полем:

function parentComboBox(el) {
    for (el = el.parentNode; el != null && Array.prototype.indexOf.call(el.classList, "combobox") <= -1;)
        el = el.parentNode;
    return el;
}
// Uses jQuery
$(".combobox.withtextlist > select").change(function() { 
  var textbox = parentComboBox(this).firstElementChild;
  textbox.value = this[this.selectedIndex].text;
});
$(".combobox.withtextlist > select").keypress(function(e) {
  if (e.keyCode == 13) // Enter pressed
    parentComboBox(this).firstElementChild.focus(); // Closes the popup
});
0
ответ дан 26 November 2019 в 20:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: