удалить фильтрацию по умолчанию из ввода html с атрибутом list [duplicate]

API-интерфейсы JAXB считаются API-интерфейсами Java EE и поэтому больше не содержатся в пути класса по умолчанию в Java SE 9. В Java 11 они полностью удалены из JDK.

Java 9 вводит понятия модулей, и по умолчанию модуль агрегации java.se доступен по пути класса (или, скорее, к пути к модулю). Как следует из названия, модуль агрегации java.se делает not включать Java EE API, которые традиционно были связаны с Java 6/7/8.

К счастью, эти Java EE API-интерфейсы, которые были предоставлены в JDK 6/7/8, все еще находятся в JDK, но по умолчанию они не находятся на пути к классу. Дополнительные API Java EE предоставляются в следующих модулях:

java.activation
java.corba
java.transaction
java.xml.bind  << This one contains the JAXB APIs
java.xml.ws
java.xml.ws.annotation

Быстрое и грязное решение: (только для JDK 9/10) Чтобы API-интерфейсы JAXB были доступны во время выполнения, укажите следующий параметр командной строки : --add-modules java.xml.bind

Но мне все еще нужно это для работы с Java 8 !!! Если вы попробуете указать --add-modules со старшим JDK, он взорвется, потому что это непризнанный вариант. Я предлагаю один из двух вариантов:

  1. Вы можете условно применить аргумент в сценарии запуска (если он есть), проверив версию JDK, проверив $JAVA_HOME/release для свойства JAVA_VERSION.
  2. Вы можете добавить -XX:+IgnoreUnrecognizedVMOptions, чтобы JVM молча игнорировал непризнанные опции вместо того, чтобы взорваться. Но будьте осторожны! Любые другие аргументы командной строки, которые вы используете, больше не будут проверяться JVM. Эта опция работает с Oracle / OpenJDK, а также с IBM JDK (с JDK 8sr4)

Альтернативное быстрое решение: (только JDK 9/10) Обратите внимание, что вы можете сделать все вышеуказанные модули Java EE доступны во время выполнения, указав параметр --add-modules java.se.ee. Модуль java.se.ee является агрегатным модулем, который включает в себя java.se.ee, а также вышеупомянутые модули API Java EE.


Правильное долгосрочное решение: (все версии JDK)

Все перечисленные выше модули API Java EE отмечены @Deprecated(forRemoval=true), поскольку они запланированы для удаления в Java 11 . Таким образом, подход --add-module больше не будет работать в Java 11 из коробки.

Что вам нужно сделать в Java 11 и forward, это включить вашу собственную копию API-интерфейсов Java EE на пути к пути или пути к модулю. Например, вы можете добавить API JAX-B в качестве зависимости от maven следующим образом:





    javax.xml.bind
    jaxb-api
    2.2.11


    com.sun.xml.bind
    jaxb-core
    2.2.11


    com.sun.xml.bind
    jaxb-impl
    2.2.11


    javax.activation
    activation
    1.1.1

Подробную информацию о модульности Java см. В JEP 261: Система модулей

14
задан Dave W 27 May 2016 в 08:36
поделиться

4 ответа

HTML:

<input list="values" placeholder="select">
<datalist id="values">
  <option value="orange">
  <option value="banana">
  <option value="lemon">
  <option value="apple">
</datalist>

JS:

$('input').on('click', function() {
    $(this).attr('placeholder',$(this).val());
  $(this).val('');
});
$('input').on('mouseleave', function() {
  if ($(this).val() == '') {
    $(this).val($(this).attr('placeholder'));
  }
});
2
ответ дан FelixSFD 22 August 2018 в 13:35
поделиться

<datalist> использует функцию автозаполнения, так что это нормальное поведение.

Например, если вы установите значение ввода «o», вы увидите только оранжевый в параметрах каталогизации. Он проверяет слово из первой буквы. Но если вы установите значение ввода в «a», вы не увидите никаких параметров.

Итак, если у вас уже есть значение во вводе, то ничего не будет отображаться в параметрах datalist, кроме этого значения, если оно существует. Это не ведет себя как select.

Обходным решением для этого было бы использовать jquery, например, это:

$('input').on('click', function() {
  $(this).val('');
});
$('input').on('mouseleave', function() {
  if ($(this).val() == '') {
    $(this).val('apple');
  }
});

Полный тест здесь: https: // jsfiddle .net / yw5wh4da /

Или вы могли бы использовать <select>. Для меня это лучшее решение в этом случае.

4
ответ дан jakob 22 August 2018 в 13:35
поделиться

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

Так на основе решения выше, я сделал для меня следующее решение:

HTML:

<input id="other" list="values" value="<?php echo $val; ?>">
 <datalist id="values">
  <option value="orange">
  <option value="banana">
 </datalist>

JS:

jQuery(document).ready(function ($) {
    function putValueBackFromPlaceholder() {
        var $this = $('#other');
        if ($this.val() === '') {
            $this.val($this.attr('placeholder'));
            $this.attr('placeholder','');
        }
    }

    $('#other')
        .on('click', function(e) {
            var $this = $(this);
            var inpLeft = $this.offset().left;
            var inpWidth = $this.width();
            var clickedLeft = e.clientX;
            var clickedInInpLeft = clickedLeft - inpLeft;
            var arrowBtnWidth = 12;
            if ((inpWidth - clickedInInpLeft) < arrowBtnWidth ) {
                $this.attr('placeholder',$this.val());
                $this.val('');
            }
            else {
                putValueBackFromPlaceholder();
            }
        })
        .on('mouseleave', putValueBackFromPlaceholder);
});

Для меня много ввода коробки на странице, и я хочу, чтобы у этого было такое поведение, поэтому я работаю с id и имею его «личным». Если вы хотите изменить его на более общую функцию, вам придется привязать putValueBackFromPlaceholder к элементу, по которому произошел щелчок, и самому событию.

1
ответ дан Olga Farber 22 August 2018 в 13:35
поделиться

Просто вставьте желаемое значение по умолчанию во входной тег. Никакого дополнительного кодирования JavaScript не требуется

        <input list="skills" value="DBA">

          <datalist name="skills" id="skills">

              <option value="PHP">Zend PHP</option>
              <option value="DBA">ORACLE DBA</option>
              <option value="APEX">APEX 5.1</option>
              <option value="ANGULAR">ANGULAR JS</option>

          </datalist>
0
ответ дан Sharfuddin Zishan 22 August 2018 в 13:35
поделиться
Другие вопросы по тегам:

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