2013-03-20 78 views
0

This是我的代码:为什么我不能从2个函数内部调用该函数?

inserisciMarker(); 

function scorriAllaLista(param) { 
    alert(param); 
} 

function inserisciMarker() { 
    markerClick = function() { 
     $('#example').attr("onclick", "scorriAllaLista('hello'); return false;"); 
    }; 

    markerClick(); 
} 

点击链接,Uncaught ReferenceError: scorriAllaLista is not defined

为什么?我该如何解决它?

+1

最有可能它没有全球定义。 'window.scorriAllaLista = scorriAllaLista'为什么你用javascript设置onclick属性而不是绑定一个事件? – 2013-03-20 14:11:58

+4

你不应该使用'attr()'来添加事件处理程序! – epascarello 2013-03-20 14:12:11

+0

@both:我不能,对于这个未解决的问题:http://stackoverflow.com/questions/13033506/why-i-cant-attach-an-dynamic-event-handler-to-this-element – markzzz 2013-03-20 14:13:52

回答

2

如果你真的必须这样做,你做的方式,可以将方法添加到全局window对象,与此类似:

window.scorriAllaLista = function(param) { 
    alert(param); 
} 

DEMO - 因为你已经使用return false你可能有href="#"return false;已经停止传播以及防止默认行为脱身添加方法window


+0

+1,因为这解决了OP的实际问题(与最初讲述的有所不同)。我使用动态函数测试了一个简单的变体(从而避免了参数)。 – 2013-03-20 14:57:00

+0

但是为什么我需要给dom添加函数?该函数应该在函数内部可见。 – markzzz 2013-03-20 15:00:54

+1

@markzzz:我不是100%肯定的,但它肯定与该方法在“onclick”属性中调用的事实有关。我不知道内在函数,但是你得到的错误信息表明希望'scorriAllaLista'在全球范围内可以访问。由于[** dystroy **](http://stackoverflow.com/users/263525/dystroy)'答案显示,使用'.click()'将不会将您的方法添加到'window',但您无法按照您在评论中所述的方式执行此操作。 – Nope 2013-03-20 15:25:12

10

这不是你如何使用jQuery绑定事件处理程序。

更换

$('#example').attr("onclick", "scorriAllaLista('hello'); return false;"); 

$('#example').click(function(){ 
    scorriAllaLista('hello'); 
    return false; 
}); 
+0

正确的答案,可能是最简单的解决方案,再次!!/ninjad :) – 2013-03-20 14:12:39

+0

'return false'在这种情况下是多余的。 – 2013-03-20 14:13:11

+0

不,我不能!查看我对主要问题的评论! – markzzz 2013-03-20 14:14:29

相关问题