我想在Jquery中设置一个全局变量,这样当我点击一个列表项时,单击的列表项的id就变成了变量的值。 我有以下代码,也在this fiddle。
然而我拥有它的方式:当你点击列表项时,正确的值被放入console.log.However然后当我点击demo div时,变量被重置并且是未定义的。< / p>
当我点击demo时,如何获取id的值,当我点击列表项时,它是id的值?
例如:
当我点击aaa时,点击演示框时的值应为id-1
当我点击bbb时,点击演示框时的值应为id-2
<div id="demo"></div>
<ul>
<li id="id-1">aaa</li>
<li id="id-2">bbb</li>
</ul>
<script>
var id;
jQuery(document).on("click", "li", function (event) {
var id =jQuery(this).attr('id') || '';
console.log(id);
$( "#demo" ).show();
});
$(function() {
$("#demo").click(function(e) {
console.log(id);
});
});
</script>
<style>
#demo {
border: 1px solid;
display:none;
height: 100px;
width: 100px;
}
</style>
答案 0 :(得分:7)
var id;
jQuery(document).on("click", "li", function (event) {
//should not not var here, using var here will declare the variable id as a local variable in the handler function scope
id = jQuery(this).attr('id') || '';
console.log(id);
$("#demo").show();
});
$(function () {
$("#demo").click(function (e) {
console.log(id);
});
});
答案 1 :(得分:4)
你再次在循环中声明id
。
var id;
jQuery(document).on("click", "li", function (event) {
id =jQuery(this).attr('id') || '';
console.log(id);
$( "#demo" ).show();
});
更改
var id =jQuery(this).attr('id') || ''; to
id =jQuery(this).attr('id') || ''; inside the loop.
答案 2 :(得分:2)
这是因为你重申了var id
var id; // GLOBAL
jQuery(document).on("click", "li", function (event) {
var id =jQuery(this).attr('id') || ''; // LOCAL TO THIS BLOCK
所以只需使用全局变量,
var id; // GLOBAL
jQuery(document).on("click", "li", function (event) {
id =jQuery(this).attr('id') || ''; // Use GLOBAL id here
答案 3 :(得分:0)
演示http://jsfiddle.net/devmgs/LbZe6/1/
不要使用var inside,因为它会使它成为局部变量
var id;
jQuery(document).on("click", "li", function (event) {
id =jQuery(this).attr('id') || '';
console.log(id);
$( "#demo" ).show();
});
$(function() {
$("#demo").click(function(e) {
console.log(id);
});
});