2014-09-11 162 views
0

這裏的人是我的腳本來獲得選定的選項的價值的變化,但沒有按預期工作。選項更改我想獲取選定的選項的值,但它返回所有以前和當前值。爲什麼?onchange選擇選項不起作用

<div id="dropdown" style="height: 30px;width: 100%;text-align: center;"> 
Select website url: 
<select name="selectsite" id="selectsite" style="border-radius: 5px; width: 300px;"> 
      <option value="0">site1</option> 
      <option value="1">site2</option> 
      <option value="2">site3</option> 
</select> 
</div> 
<br /> 
<button id="start" type="button">Start</button> 
<button id="pause" type="button">Pause</button> 

<script type="text/javascript"> 
$(document).ready(function() { 

    var selectval = $('#selectsite').val(); //get value of select option 

//when first option is selected which is by default 
    if(selectval == 0) { 
    var selval = 0; 
    var injsArray = $.parseJSON('<?php echo json_encode($data); ?>'); 
    var data = injsArray[selval]['dat']; //load the data 
    $('#start').on('click',function(){ 
      playthis(selval, data); 
    }); 
    } 

    $('#selectsite').on('change',function(e) { 
    var selval = $(this).val(); 
    var injsArray = $.parseJSON('<?php echo json_encode($data); ?>'); 
    var hdata = injsArray[selval]['dat']; //load the data 

    $('#start').on('click',function(){ 
      playthis(selval,hdata); 
    }); 
    }); 

    function playthis(value,data){ 
    console.log("Selected option value is "+value); 
    } 

}); 
</script> 

如何解決這個問題?由於我是編程新手,請提出建議,如果我做錯了什麼。 在此先感謝

+0

只是把警戒內的變化情況,檢查其轉到該函數內部或不 – 2014-09-11 05:14:17

+2

因爲你註冊多個點擊處理程序 – 2014-09-11 05:14:27

回答

4

每次調用更改處理程序時,您都註冊了一個新的點擊處理程序,其結尾值爲selval,這是多次調用的原因。

你只能有一個點擊處理程序將取select的當前值,並調用playthis如下

$(document).ready(function() { 

    $('#start').on('click', function() { 
     playthis($('#selectsite').val()); 
    }); 

    function playthis(value) { 
     console.log("Selected option value is " + value); 
    } 

}); 

演示:Fiddle

另一種選擇將是解除綁定之前的處理器,其如果可能,我不會推薦。


基於更新嘗試

$(document).ready(function() { 

    var injsArray = $.parseJSON('<?php echo json_encode($data); ?>'); 
    $('#start').on('click', function() { 
     var selval = $('#selectsite').val(); 
     var hdata = injsArray[selval]['dat']; //load the data 
     playthis(selval, hdata); 
    }); 

    function playthis(value, data) { 
     console.log("Selected option value is " + value); 
    } 

}); 
+0

但我需要檢查它的第一個選項是默認還是下一個選項 – 2014-09-11 05:23:27

+0

@RonitAdhikari在您發佈的關於默認值的代碼中完全沒有區別。 – epascarello 2014-09-11 05:25:22

+0

@RonitAdhikari你是什麼意思? – 2014-09-11 05:25:26

0

嘗試這樣它會工作

$('#selectsite').change(function(e) { 
    var selval = $(this).val(); 
    $('#start').click(function(){ 
     playthis(selval); 
    }); 
); 
+0

您的答案將具有相同的確切問題,並且點擊(...)與on(「click」,...)完全相同 – epascarello 2014-09-11 05:21:39

0

我想你想要做這樣的事情

獲得選擇的值點擊開始

您可以點擊這裏演示

http://jsfiddle.net/victor_007/3xgLjdew/

JS

$(document).ready(function() { 

    $('#start').click(function(){ 
     var a = $("#selectsite").val() 
     alert(a); 

     if(a == 0){ 
      alert("do this") 
     } 
     else if(a == 1){ 
      alert("do that") 
     } 
     else if(a == 2){ 
      alert("do other") 
     } 
    }) 

});