我在一个简单的页面上有一个jquery移动滑块。拖动滑块时,值会在文本框中按预期更新。我看了,但无法找到这种逻辑发生的地方。
我想要的是将值传递给javascript函数。如何将change事件绑定到我的函数?
干杯
麦克
下面的代码 - 请忽略一些讨厌的黑客:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>jQuery Mobile Docs - Forms</title>
<link rel="stylesheet" href="fader/jquery.mobile-1.0a3.css" />
<script type="text/javascript" src="fader/jquery-1.5.js"></script>
<script type="text/javascript" src="fader/jquery.mobile-1.0a3.js"></script>
<script>
$('#slider-1').changed(function () {
alert("Test");
});
</script>
<style type="text/css">
.toolbar {
-webkit-box-sizing: border-box;
border-bottom: 1px solid #000;
padding: 10px;
height: 45px;
background: url(fader/Resources/Themes/JQT/img/toolbar.png) #000000 repeat-x;
position: relative;
}
.toolbar > h1 {
position: absolute;
overflow: hidden;
left: 50%;
top: 10px;
line-height: 1em;
margin: 1px 0 0 -75px;
height: 40px;
font-size: 20px;
width: 150px;
font-weight: bold;
text-shadow: rgba(0, 0, 0, 1) 0 -1px 1px;
text-align: center;
text-overflow: ellipsis;
white-space: nowrap;
color: #fff;
}
.button, .back, .cancel, .add {
position: absolute;
overflow: hidden;
top: 8px;
right: 10px;
margin: 0;
border-width: 0 5px;
padding: 0 3px;
width: auto;
height: 30px;
line-height: 30px;
font-family: inherit;
font-size: 12px;
font-weight: bold;
color: #fff;
text-shadow: rgba(0, 0, 0, 0.5) 0px -1px 0;
text-overflow: ellipsis;
text-decoration: none;
white-space: nowrap;
background: none;
-webkit-border-image: url(fader/Resources/Themes/JQT/img/button.png) 0 5 0 5;
}
body > * {
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#1e1f21), to(#272729));
}
.back {
left: 6px;
right: auto;
padding: 0;
max-width: 55px;
border-width: 0 8px 0 14px;
-webkit-border-image: url(fader/Resources/Themes/JQT/img/back_button.png) 0 8 0 14;
}
.back.active {
-webkit-border-image: url(Fader%20Test%20-%20Trade%20show/img/back_button_clicked.png) 0 8 0 14;
color: #aaa;
}
h1, h2 {
font: bold 18px Helvetica;
text-shadow: rgba(255, 255, 255, .2) 0 1px 1px;
color: #FFF;
margin: 10px 20px 5px;
}
body {
background: #000;
color: #ddd;
}
</style>
</head>
<body>
<div class="ui-body-a" data-role="page">
<div class="toolbar">
<h1>Input</h1>
<A class="back" HREF="javascript:javascript:history.go(-1)">Home</A
></div>
<form action="#" method="get">
<div class="ui-body-a" data-role="fieldcontain">
<h1>Lighting Intensity</h1>
<input type="range" name="slider-1" id="slider-1" value="0" min="0" max="100" data-theme="b" data-track-theme="a" orientation="vertical" />
</div>
</form>
</div><!-- /content -->
</div><!-- /page -->
</body>
</html>
答案 0 :(得分:23)
迈克尔。尝试用另一个元素包围滑块:
<div id="div-slider">
<input type="range" id="slider-1" />
</div>
你可以参加变革活动:
$("#div-slider").change(function() {
var slider_value = $("#slider-1").val();
// do something..
});
答案 1 :(得分:7)
您的代码存在的问题是,jtml将更改事件绑定到元素的 在html中实际创建它们,因此没有元素被绑定到您指定的更改事件
试试这个:
$('#slider-1').live('change', function(){
doYourStuffHere();
});
简而言之,live意味着JQuery将继续将事件绑定到与指定选择器匹配的元素,即使它们在评估JS绑定时不存在,因此此代码将绑定所有存在且 future html元素将#slider-1选择器与正确的更改回调匹配。
另一种选择是使用JQuery'on'绑定,它的行为略有不同,但仍可以完成这项工作。请查看“on here的文档。
答案 2 :(得分:3)
我强烈建议您查看w3schools教程。
http://www.w3schools.com/jquerymobile/jquerymobile_events_intro.asp
您缺少的关键代码是:
$(document).on("pageinit","#pageone",function(){
// PLACE ALL YOU EVENTS CODE HERE e.g.
$( "#slider" ).on( 'slidestop', function( event ) {
alert ('hi');
});
}
确保您的内容带有以下前缀:
<div data-role="page" id="pageone">
<div data-role="content">
<input type="range" name="slider" id="slider" value="10" min="0" max="100">
</div>
</div>
答案 3 :(得分:1)
使用此代码,
$( ".mySliders" ).slider({
create: function (event, ui) {
$(this).bind('change', function () {
});
}
});
请勿将 type="range"
添加到输入代码中,而是将 type="text"
放入其中。
由于您手动调用滑块功能。
答案 4 :(得分:1)
文档似乎缺乏。在搜索了很长时间之后,我发现要在事件处理程序中获取新值,需要类似$(this).slider().val()
的内容(额外的slider()
几乎无处不在地省略了部分):
$("#div-slider").change(function() {
var slider_value = $(this).slider().val();
// do something..
});
答案 5 :(得分:1)
我有同样的问题,滑块事件有太多麻烦。最后我发现了“滑动停止”#39;工作得很好的活动。这是代码:
$( "#slider-1").on('slidestop', function( event ) {
var slider_value=$("#slider-1").slider().val();
alert('Value: '+slider_value);
});
我希望这对你有用
答案 6 :(得分:0)
我对jquery mobile不太熟悉,但是在原始输入元素中添加更改处理程序应该这样做:
$('#slider-1').change(function(){
var slider_value = $(this).val()
console.log(slider_value)
// do whatever you want with that value...
})
希望得到这个帮助,
马丁
答案 7 :(得分:0)
试试这个:
var self = this;
this.sliderTouchUp = function() {
var currentVal = $('#slider-1').val();
console.log("val change to " + currentVal);
};
$('.ui-slider').live('mouseup', self.sliderTouchUp);
$('.ui-slider').live('touchend', self.sliderTouchUp);
答案 8 :(得分:0)
最短但功能性。
$('body').change(function() {
var slider_value = $('#slider-1').val();
if(slider_value == 4000){
alert("Holy smoke!");
}
}
答案 9 :(得分:0)
我正在使用此代码,它适用于jquery mobile 1.4.3。
$(".ui-slider").on('change', function(event) {
var valuenow = $(this).find(".ui-slider-handle").attr("aria-valuenow");
console.log(valuenow);
});