如何在jquery点击功能之外获取值

时间:2017-06-20 08:59:53

标签: javascript jquery html

我有一个on click函数来获取a的id,我想提醒它。 以下代码无法显示null,为什么?感谢

templateUrl: 'http://yourserver/templates/green.html'

我真正想做的是: a.js我有点,当我点击" a"它重定向到另一个需要由我的projectId呈现的页面:href =' / projectDetail'这个页面叫b.js

var projectId=null;

$('body').on('click', '#list a', function(){
                  projectId=this.id; //id should = 30
                  alert(projectId);  //here display 30
});

alert(projectId); //here display null

b.js我有:

    $.ajax({
                    type: "GET",
                    url: 'http://xxx',
                    dataType:'json',
                    contentType:"application/json",
                    success:function(data){
                        console.log(data);
                        var projectList="<ul style='list-style:none;'>"

                        for (var i = 0; i < data.data.length; i++) {

                                projectList += "<li><div id='listall'><a 
                           id='"+data.data[i].projectId+"' 
                             href='/projectDetail'>"+ 
                                  "<img class='back' src='/img/Homepage_ProjectFrame.png'></li>"
                                 }
                              var projectList="<ul>"
                             });

var projectId=null;

 $(document).on('click', '#listall a', function (){
            event.preventDefault();
             projectId=this.id;
             alert(projectId);
  });  

 alert(projectId);

所以我需要来自a.js的projectId来呈现动态信息 你有什么好主意吗? 非常感谢你的帮助

1 个答案:

答案 0 :(得分:2)

“click”事件处理程序之外的第二个alert(projectId);会在页面加载后立即运行。不可避免地,这是之前你的“点击”处理程序可能被执行,因为用户可能没有时间点击它,即使他们有时间,也不能保证他们会。因此,当代码执行时,不会填充变量projectId

您当然可以在“点击”事件之外使用projectId,但您必须等到至少发生一次“点击”事件后才会发现它有值。

在发生任何此类事件之前,您的超链接还会导致页面回发。由于您使用的是jQuery,因此可以非常轻松地防止这种情况:

$('body').on('click', '#list a', function(event) {
  event.preventDefault(); //prevent default hyperlink redirect/reload behaviour
  projectId=this.id; //id should = 30
  alert(projectId);  //here display 30
});

最后,确保您想要使用该值的其他地方没有做任何愚蠢的事情,比如声明另一个范围更窄的“projectId”变量,然后尝试使用那个。例如,这将按您的意愿工作:

var projectId = null;

$('body').on('click', '#list a', function(event) {
  event.preventDefault(); //prevent default hyperlink redirect/reload behaviour
  projectId=this.id; //id should = 30
  alert(projectId);  //here display 30
  exampleFunc(); //call the function below
});

function exampleFunc() {
  var projectId = null; //oops, another "projectId" with narrower scope (within this function) will take precedence here
  alert(projectId); //will be null
});

var projectId = null;

$('body').on('click', '#list a', function(event) {
  event.preventDefault(); //prevent default hyperlink redirect/reload behaviour
  projectId=this.id; //id should = 30
  alert(projectId);  //here display 30
  exampleFunc(); //call the function below
});

function exampleFunc() {
  alert(projectId); //will be 30
});