2013-03-20 74 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

相關問題