2016-07-26 61 views
0

我遵循了一個關於使用javascript製作文件上傳器的教程,並且我將它運用了,所以我認爲它會更好地作爲jQuery插件,以便我可以在我的頁面的不同元素上使用它。於是我開始將代碼移植到我的插件中,並遇到了一個問題。爲什麼ondragover不能在jQuery插件中工作?

通常情況下,您可以使用jQuery和JavaScript,但出於某種原因,ondragover不能在我的插件中工作。

;(function($) { 
    "use strict"; 
    $.fn.asiLoader = function() { 
     var base=$(this); 

     base.ondragover=function(){ 
       alert('test'); 
       return false; 
     } 
     return base; 
    } 
})(jQuery); 

我知道我可以使用

base.on("dragover", function(e) { 
    alert('test'); 
    e.preventDefault(); 
    e.stopPropagation(); 
}); 

代替,而工作,是jQuery的相當,但我想知道爲什麼JavaScript是不工作?

+0

爲什麼要使用'base.ondragover'而不是'base.on(「dragover」)'? – gcampbell

+0

自發布以來,我一直在將其更改爲與其下面的代碼相同的jQuery。我只是感到困惑,爲什麼JavaScript代碼無法正常工作。如果我在我的插件外使用它,但它在我的插件中不起作用。爲了進一步學習,我想了解爲什麼javascript在我的插件中不起作用。我可能會使用jQuery替代品,但我只是想知道爲什麼,通常可以混合使用jQuery和JavaScript代碼。 –

+0

最好使用'foo.on(「bar」)'(jQuery)或'foo.addEventListener(「bar」)'(原生JS)而不是'foo.onbar',因爲您可以添加和刪除多個偵聽器。 – gcampbell

回答

1

base=$(this)是一個jQuery對象和jQuery對象沒有.dragover屬性,但DOM對象了。

+0

謝謝你,這是完美的。所以如果我想使用JavaScript,我只需要從基地獲取ID,然後它就可以工作。謝謝 –

0

我認爲你應該使用

base.dragover(function(){})