2014-09-11 142 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") 
     } 
    }) 

});