我有一个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来呈现动态信息 你有什么好主意吗? 非常感谢你的帮助
答案 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
});