Testuję zdarzenia slider w jQueryMobile i musiałem czegoś przegapić.jQueryMobile: jak pracować z wydarzeniami z suwakiem?
kod strony jest:
<div data-role="fieldcontain">
<label for="slider">Input slider:</label>
<input type="range" name="slider" id="slider" value="0" min="0" max="100" />
</div>
i jeśli mam zrobić:
$("#slider").data("events");
uzyskać
blur, focus, keyup, remove
Co chcę zrobić, to uzyskać wartość raz wydaniu użytkownika uchwyt suwaka
io hak do zdarzenia keyup jako
$("#slider").bind("keyup", function() { alert('here'); });
robi absolutnie nic :(
Muszę powiedzieć, że ja błędnie zakłada że jQueryMobile używany jQueryUI sterujących jak to była moja pierwsza myśl, ale teraz pracuję głęboko w wydarzeniach, które widzę, nie jest tak w przypadku CSS Design.
Co mogę zrobić?
jQuery komórkowy Slider source code można znaleźć na Git czy to pomaga nikomu, jak również strona Test można znaleźć w JSBin
Jak rozumiem, #slider
jest pole tekstowe z wartość, więc potrzebowałbym podłączyć się do uchwytu suwaka, ponieważ wygenerowany kod dla tego suwaka to:
<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>
i sprawdzanie wydarzeń w kotwicy handler mam tylko zdarzenie click
$("#slider").next().find("a").data("events");
Fix
Ivan odpowiedź, musimy tylko:
<div data-role="fieldcontain">
<label for="slider">Input slider:</label>
<input type="range" name="slider" id="slider" value="0" min="0" max="100" />
</div>
a następnie
$(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());
}
Dziękuję Ivan za heads up.
Znaleźliście dokładnie ten sam problem jak ja tydzień temu. jQMobile, chociaż przysięgali, że działają na szczycie interfejsu jQuery, to nie jest tak w ogóle. Zauważa, że mobilne widżety jQuery wyglądają tylko jak widżety interfejsu użytkownika, ale nie podążają za tym samym pojęciem UI, zapewniając interfejs do kontroli, jak określone haki i właściwości, z wyjątkiem specyficzne atrybuty html, które są IMHO dość odległe od użytecznych i potencjalnie szkodzących znacznikom html. –
Rozwiązanie podobne do Ivana: [forum jquery] (http://forum.jquery.com/topic/how-to-execute-javascript-code-when-finger-is-lifted-from-a-slider) To jest tylko jeden pracował dla mnie. – user1127860