2010-11-14 82 views
2

我有一個選項正在生成一個滑塊。當選擇選項改變時,滑塊以相同的方式改變,反之亦然。jquery .change()不承認變化!

我已經設置了一個警報,當select上的選項發生變化時會觸發。當我從select中更改選項時,此警報會識別並觸發,但是當我從滑塊更改它時,什麼都不會觸發。

我真的需要得到這個東西來激發。這是我的代碼。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
    <title>  Demo Page: Using Progressive Enhancement to Convert a Select Box Into an Accessible jQuery UI Slider</title> 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script> 
<script type="text/javascript" src="js/jquery-ui-1.7.1.custom.min.js"></script> 
<script type="text/javascript" src="js/selectToUISlider.jQuery.js"></script> 
<link rel="stylesheet" href="css/redmond/jquery-ui-1.7.1.custom.css" type="text/css" /> 
<link rel="Stylesheet" href="css/ui.slider.extras.css" type="text/css" /> 
<style type="text/css"> 
    body {font-size: 62.5%; font-family:"Segoe UI","Helvetica Neue",Helvetica,Arial,sans-serif; } 
    fieldset { border:0; margin: 6em; height: 12em;}  
    label {font-weight: normal; float: left; margin-right: .5em; font-size: 1.1em;} 
    select {margin-right: 1em; float: left;} 
    .ui-slider {clear: both; top: 5em;} 
</style> 
<script type="text/javascript"> 
    $(function(){ 
     //demo 1 
     $("#hide_me").hide(); 
     var abc = $('select#privs').selectToUISlider().next(); 

     $('.change').change(function() { 
      alert("Ive been called"); 
     }); 
    }); 

</script> 
<script type="text/javascript"> 

</script> 

</head> 

    <body> 

<form action="#"> 
    <!-- demo 1 --> 
    <fieldset> 
     <label for="speed">Select a Level</label> 
     <select name="speed" class="change" id="privs"> 
      <option value="Read">Read</option> 
      <option value="Create">Create</option> 
      <option value="Update">Update</option> 
      <option value="Delete">Delete</option> 
     </select> 

    </fieldset> 

</form> 

+0

只需在滑塊執行的函數中調用select.change? – Konerak 2010-11-14 20:06:42

回答

4

快速谷歌搜索建議附加一個onChange事件處理程序,您使用的特定滑塊控制正確的做法是:

var abc = $('select#privs').selectToUISlider({ 
    sliderOptions: { 
     change: function(e, ui) { 
      alert('Changed!'); 
     } 
    } 
}).next(); 
+0

這工作就像一個魅力。謝謝! – Peter 2010-11-14 20:15:27

3

這是預期的行爲,程序化更改不會觸發事件(如果發生這種情況,會在很多情況下會出現無限循環)。

觸發您的處理程序,只是自己火change事件,例如:

$('#privs').val('Read').change(); 

在你的情況下,使用stop事件的滑塊,這樣的:

var abc = $('#privs').selectToUISlider({ 
    sliderOptions: { 
     stop: function(event, ui) { 
      $('.change').change(); 
     } 
    } 
}).next(); 

You can try it here,如果您正在處理多個元素,請使用.each,您可以在其中觸發與您所在滑塊一起使用的<select>change事件。

+0

「程序變更不會觸發onchange事件」 - 非常感謝你@Nick Craver – 2013-01-12 10:42:31