Мое обходное решение (JavaScript)
var s1 = " SELECT "
+ "FROM table t "
+ " where t.field in ";
var s3 = '(';
for(var i =0;i<searchTerms.length;i++)
{
if(i+1 == searchTerms.length)
{
s3 = s3+'?)';
}
else
{
s3 = s3+'?, ' ;
}
}
var query = s1+s3;
var pstmt = connection.prepareStatement(query);
for(var i =0;i<searchTerms.length;i++)
{
pstmt.setString(i+1, searchTerms[i]);
}
SearchTerms
- это массив, который содержит ваши входные / ключи / поля и т. д.
Вы можете сами создать виджет.
Широкая идея:
data-lbound
для сохранения более низкого значения и data-ubound
для хранения более высокого значения. Обновите атрибуты данных контейнера в событии input
входов диапазона. Используйте эти атрибуты данных для извлечения значений в любое время, необходимое для отправки формы или любого другого use ::after
в контейнере со свойством content
, установленным для атрибутов данных контейнера. Это будет использоваться для отображения текущих диапазонов. Отдых - это все, что нужно для украшения вкладов диапазонов. Вот небольшая демонстрация, которую я создал. ( Проверьте его с помощью Chrome или Firefox ). Работает и с клавиатурой.
Fiddle: http://jsfiddle.net/abhitalks/a1f1k8d0/2/
Фрагмент:
.multi-range, .multi-range * { box-sizing: border-box; padding: 0; margin: 0; }
.multi-range {
position: relative; width: 160px; height: 28px; margin: 16px;
border: 1px solid #ddd; font-family: monospace;
}
.multi-range > hr { position: absolute; width: 100%; top: 50%; }
.multi-range > input[type=range] {
width: calc(100% - 16px);
position: absolute; bottom: 6px; left: 0;
}
.multi-range > input[type=range]:last-of-type { margin-left: 16px; }
.multi-range > input[type=range]::-webkit-slider-thumb { transform: translateY(-18px); }
.multi-range > input[type=range]::-webkit-slider-runnable-track { -webkit-appearance: none; height: 0px; }
.multi-range > input[type=range]::-moz-range-thumb { transform: translateY(-18px); }
.multi-range > input[type=range]::-moz-range-track { -webkit-appearance: none; height: 0px; }
.multi-range > input[type=range]::-ms-thumb { transform: translateY(-18px); }
.multi-range > input[type=range]::-ms-track { -webkit-appearance: none; height: 0px; }
.multi-range::after {
content: attr(data-lbound) ' - ' attr(data-ubound);
position: absolute; top: 0; left: 100%; white-space: nowrap;
display: block; padding: 0px 4px; margin: -1px 2px;
height: 26px; width: auto; border: 1px solid #ddd;
font-size: 13px; line-height: 26px;
}
<div class='multi-range' data-lbound='10' data-ubound='50'>
<hr />
<input type='range'
min='10' max='45' step='5' value='10'
oninput='this.parentNode.dataset.lbound=this.value;'
/>
<input type='range'
min='15' max='50' step='5' value='50'
oninput='this.parentNode.dataset.ubound=this.value;'
/>
</div>
Примечание: Вышеприведенная демо - это просто демо. Он отлично работает в Chrome и Firefox, но я не смог проверить его в IE / Edge. Я чувствую, что у него будут проблемы с IE / Edge, потому что слайдерные слайды встроены в трек в этих браузерах. Вы можете дополнительно настроить и стилизовать его для работы с IE / Edge.