Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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 jquery从select标记中获取值,并在click函数中使用它_Javascript_Jquery - Fatal编程技术网

Javascript jquery从select标记中获取值,并在click函数中使用它

Javascript jquery从select标记中获取值,并在click函数中使用它,javascript,jquery,Javascript,Jquery,我有一个下拉选择,我需要从中获取值,并将其放入glassCode变量中。我可以获取该值并将其显示在更改事件内的警报框中。但是,当我试图在变更事件之外使用它时,我一无所获 <form id="form1" name="form1" method="post"> <select id="glassProduct"> <option value="GI032">GI032 CLEAR FLOAT 3.2MM</option>

我有一个下拉选择,我需要从中获取值,并将其放入glassCode变量中。我可以获取该值并将其显示在更改事件内的警报框中。但是,当我试图在变更事件之外使用它时,我一无所获

<form id="form1" name="form1" method="post">
    <select id="glassProduct">
        <option value="GI032">GI032 CLEAR FLOAT 3.2MM</option>
        <option value="GI040">GI040 CLEAR FLOAT</option>
    </select>
    <input type="button" name="calculate" id="calculate" value="Calculate">
    <input type="reset" value="Clear" />
</form>

在回调函数中,声明var glassCode=$this.val,这是一个局部变量。本例中的Local是指回调函数本身。也就是说,变量超出了这个函数的范围

要从另一个函数(如单击处理程序)中访问glassCode,需要在具有全局作用域的某个对象上定义它。最直接的方法是在全局窗口对象上定义它。然而,这通常是不赞成的,因为它很容易用许多单独的变量将顶级对象弄乱。解决方法是使用特定于应用程序的命名空间。考虑这个问题:

$("#glassProduct").change(function(){
  glass = window.glass || {};
  glass.glassCode=$(this).val();
  alert(glassCode);
});//end of on change glassProduct

$("#calculate").click(function(){
  console.log("glass code: " +window.glass.glassCode);
});

如果不需要在全局范围内使用glassCode变量,则无需存储该变量,只需使用Jquery selected即可获得select selected值:

    var glasscode;
    $("#calculate").click(function(){
      glasscode=$('#glassProduct option:selected').text()
      alert(glasscode);
    });

我认为您应该了解Javascript的作用域和作用域链

代码的问题是,更改中的glassCode与单击中的glassCode不在同一范围内,尽管它们具有相同的名称

因此Jquery应该是

var glassCode; // share the same scope in two function
$("#glassProduct").change(function(){
    glassCode=$(this).val();
    alert(glassCode);
});

$("#calculate").click(function(){
    console.log("glass code: " +glassCode);
});

您需要将glassCode保存到JS文件范围内的全局变量或其他变量。这里glassCode变量在更改范围内,因此当您在单击事件中记录它时,您将不会获得新值是的,谢谢,但我需要存储它。我需要在on change事件中获取该代码。所以稍后我可以使用该代码做一些事情,如果您在函数执行期间需要这个值,只需存储在本地、全局或原型变量中。查看我用局部变量解决方案更新的答案。瑞克,那是什么| |那是还是??在玻璃上=窗。玻璃| |{};如果存在,它使用window.glass,否则它将window.glass初始化为对象文字。当我去小提琴时,我打开firebug,控制台中没有显示任何内容,谢谢你的回复
    var glasscode;
    $("#calculate").click(function(){
      glasscode=$('#glassProduct option:selected').text()
      alert(glasscode);
    });
var glassCode; // share the same scope in two function
$("#glassProduct").change(function(){
    glassCode=$(this).val();
    alert(glassCode);
});

$("#calculate").click(function(){
    console.log("glass code: " +glassCode);
});