Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从onchange事件内部更改所选项目_Javascript_Jquery_Html - Fatal编程技术网

Javascript 从onchange事件内部更改所选项目

Javascript 从onchange事件内部更改所选项目,javascript,jquery,html,Javascript,Jquery,Html,在以下选择框中: var sval=1; function foo(v) { sval=Number(v); } ... <select name="sval" onchange=" if (confirm('...?')) foo(this.value); else $(this).val(sval);"> <option value="1">1 <option value="2">2 <option value="3">

在以下选择框中:

var sval=1;
function foo(v) {
    sval=Number(v);
}
...
<select name="sval" onchange="
   if (confirm('...?')) foo(this.value); else $(this).val(sval);">
  <option value="1">1
  <option value="2">2
  <option value="3">3
但是不清楚内联代码
$(this.val(sval)
将select重置为1的原因是什么


我认为其他部分是不必要的

改为

<select name="sval" onchange="
   if (confirm('...?')) foo(this.value);">

你的方法太可怕了

当您在元素上内联JavaScript事件时,它看起来很难看

为什么要将“选择”值设置为当前选定值的值

你能跳过这个
$(this.val(sval=this.value;)且仅具有此
sval=this.value

我只是一个超级粉丝,在不需要变量和代码的情况下,将代码和值保持在最低限度

试试看

  <script type="text/javascript">

    var sval = 1;
    var foo = function () {

   if(confirm('...?')) {

      $(this).val(sval = this.value);
        }
        else
        {
         $(this).val(sval);
        }
    };

    setTimeout(function () {

        document.getElementById('sval').onchange = foo;
    }, 100);

</script>

<select id="sval">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

var-sval=1;
var foo=函数(){
如果(确认(“…?”){
$(this.val)(sval=this.value);
}
其他的
{
$(this).val(sval);
}
};
setTimeout(函数(){
document.getElementById('sval').onchange=foo;
}, 100);
1.
2.
3.

我修改了您的代码,我就是这样做的

工作:

Javascript:

$( "#svalue" ).change(function() {
    if (confirm('...?')) {
            vals =$('#svalue').val();
     $('#svalue').val(this.options[this.selectedIndex].value);
    }else{
      $('#svalue').val(vals);
    }
});
var sval=1;
function foo(v) {
   $('#svalue').val(v);
}
HTML:

<select id="svalue">
    <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>

显然,您忘记将
sval
的值更改为用户以前单击过的值。代码是
sval=(this.value)
onchange
部分。

我找到了代码不起作用的原因

结果表明,在小提琴和浏览器中的执行存在差异,这使得跟踪问题变得更加困难


在onchange事件的内联代码中,定义了一个与
name=“sval”
同名的变量,由于该名称与全局上下文中的整型变量相同,因此代码没有使用正确的值来更改select的值。

$(this).val()
不会更改所选项目;如果未确认,则重新选择旧值。确认更改为3后,sval的值变为3,然后更改为2并单击“确认”对话框上的“否”应返回到3,并返回到1…否则零件不存在neccessary@bbonevdude我更新了我的答案,请检查。最初变量sval=1,所选项目为1;将选择项更改为2后,如果确认,则两者都应更改;之后,如果选择了3但未确认,则变量和所选项目都应返回到2.0。编辑它。现在它返回到前面的值-是的,这就是我想要的,但仍然没有回答我的问题为什么内联代码不工作。。。
<select name="sval" onchange="if (confirm('...?')) {foo(this.value);sval=(this.value);} else $(this).val(sval);">
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
var sval=1;
function foo(v) {
   $('#svalue').val(v);
}