Я тестирую события slider в jQueryMobile, и я должен что-то пропустить.
код страницы:
<div data-role="fieldcontain">
<label for="slider">Input slider:</label>
<input type="range" name="slider" id="slider" value="0" min="0" max="100" />
</div>
и если я это сделаю:
$("#slider").data("events");
Я получаю
blur, focus, keyup, remove
Что я хочу сделать, это получить значение после того, как пользователь выпустит ручку ползунка
и имеющий крючок для события keyup как
$("#slider").bind("keyup", function() { alert('here'); } );
ничего не делает: (
Я должен сказать, что я неправильно принял, что jQueryMobile использовал jQueryUI, поскольку это была моя первая мысль, но теперь, работая глубоко в событиях, я вижу, что это не так, только с точки зрения CSS Design.
Что я могу сделать?
jQuery Mobile Slider исходный код можно найти на Git, если это помогает любой, а также тестовую страницу, можно найти в JSBin
Как я понимаю, #slider
- это текстовое поле со значением, поэтому мне нужно будет подключиться к ползунку, поскольку сгенерированный код для этого ползунка:
<div data-role="fieldcontain" class="ui-field-contain ui-body ui-br">
<label for="slider" class="ui-input-text ui-slider" id="slider-label">Input slider:</label>
<input data-type="range" max="100" min="0" value="0" id="slider" name="slider" class="ui-input-text ui-body-null ui-corner-all ui-shadow-inset ui-body-c ui-slider-input" />
<div role="application" class="ui-slider ui-btn-down-c ui-btn-corner-all">
<a class="ui-slider-handle ui-btn ui-btn-corner-all ui-shadow ui-btn-up-c" href="#" data-theme="c" role="slider" aria-valuemin="0" aria-valuemax="100" aria-valuenow="54" aria-valuetext="54" title="54" aria-labelledby="slider-label" style="left: 54%;">
<span class="ui-btn-inner ui-btn-corner-all">
<span class="ui-btn-text"></span>
</span>
</a>
</div>
</div>
и проверять события в привязке обработчика, я получаю только событие click
$("#slider").next().find("a").data("events");
Fix
От ответа от Ivan нам просто нужно:
<div data-role="fieldcontain">
<label for="slider">Input slider:</label>
<input type="range" name="slider" id="slider" value="0" min="0" max="100" />
</div>
а затем
$(document).bind("pagecreate", function(event, ui) {
$('#slider').siblings('.ui-slider').bind('tap', function(event, ui){ makeAjaxChange($(this).siblings('input')); });
$('#slider').siblings('.ui-slider a').bind('taphold', function(event, ui){ makeAjaxChange($(this).parent().siblings('input'));
});
function makeAjaxChange( elem ) {
alert(elem.val());
}
Спасибо Иван за головы.