2013-09-26 195 views
4

我想在Jquery中設置一個全局變量,這樣當我點擊一個列表項時,被點擊的列表項的id就變成了變量的值。 我有以下代碼也在this fiddle在jQuery中設置全局變量onclick

但是我擁有它的方式:當您單擊列表項時,該值正確地放在console.log中。但是,當我點擊演示div時,變量被重置並且未定義。

當我點擊演示時,如何獲得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> 

回答

6
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); 
     }); 
    }); 
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. 
0

演示http://jsfiddle.net/devmgs/LbZe6/1/

不使用VAR裏面,因爲它將使局部變量

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); 
}); 
}); 
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