我需要知道哪个元素是我从范围滑块中获得的值。我有以下代码:
<h:outputText id="displayValues" value="#{myBean.min} - #{myBean.max}"/>
<p:slider
id="mySlider"
for="min,max"
display="displayValues"
range="true"
displayTemplate=" {min} - {max}"
minValue="#{myBean.value1}"
maxValue="#{myBean.value2}" >
<p:ajax event="slideEnd" listener="#{simuladorBean.onSlideEnd}"/>
</p:slider>
<h:inputHidden id="min" value="#{myBean.min}"/>
<h:inputHidden id="max" value="#{myBean.max}" />
在带有event.getValue()的myBean中,我知道我移动的滑块的新值,但我需要知道这个新值是否来自最大或最小滑块。 有人可以帮我解决这个问题。
谢谢
答案 0 :(得分:2)
通常,提交表单时,还会提交inputHidden
max和min。但由于您在滑块上使用p:ajax
,并且由于process
的默认p:ajax
为@this
,因此未提交inputHidden
字段。如果您将p:ajax
更改为
<p:ajax event="slideEnd" process="@this, min, max" listener="#{simuladorBean.onSlideEnd}"/>
(或者将整个xhtml块包装在容器中并处理它)
最小和最大 提交,在onSlideEnd
中,您可以将事件中获得的值与最小值和最大值进行比较,并确定哪一个更改了。
另见
答案 1 :(得分:0)
我有类似的需求,我实现了这个简单的解决方案: 我创建了这个函数
function isMinOrMaxRangeFocus() {
if ($($('#sliderId .ui-slider-handle')[0]).hasClass('ui-state-focus')) return 'min';
if ($($('#sliderId .ui-slider-handle')[1]).hasClass('ui-state-focus')) return 'max';
return ('none');
}
在你可以在像这样的onstart上使用它之后:
<p:slider id="sliderId" for="sliderMin,sliderMax" range="true" >
<p:ajax event="slideEnd" onstart="$('#whichSliderIs).val(isMinOrMaxRangeFocus());" process="@this,whichSliderIs,sliderMin,sliderMax" listener="#{myBean.myListener()}" />
</p:slider>
<h:inputHidden id="sliderMin" value="#{myBean.sliderMin}"/>
<h:inputHidden id="sliderMax" value="#{myBean.sliderMax}"/>
<h:inputText id="whichSliderIs" value="#{myBean.whichSliderIs}" style="display: none"/>
了解它很容易知道哪个值发生了变化!