2014-11-22 119 views
1

我與"element.dispatchEvent is not a function" js error caught in firebug of FF3.0有同樣的問題,但在谷歌瀏覽器。如何解決「element.dispatchEvent不是一個函數」而不會破壞別的東西?

我寫過<script>jQuery.noConflict();</script> 所有腳本。但現在我有一個問題:

... 
    $("a.try").click(function() { 
    ... 

不確定是不是一個函數

... 
var blockHeight = $(window).height(); 
... 

不確定是不是一個函數

因此第一個解決方法是無效的。

P.S.

HTML的一部分,其中包括我的腳本:

.... 
<script type="text/javascript" 
     src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> 
<![endif]--> 
<script type="text/javascript" 
     src="<c:url value='/resources/js/underscore.js'/>"></script> 
<script type="text/javascript" 
     src="<c:url value='/resources/js/jquery-1.8.2.min.js'/>"></script> 

<script type="text/javascript" 
     src="<c:url value='/resources/js/jquery.mousewheel.js'/>"></script> 
<script type="text/javascript" 
     src="<c:url value='/resources/js/popup.js'/>"></script> 
<script type="text/javascript" 
     src="<c:url value='/resources/js/jquery.jscrollpane.min.js'/>"></script> 

<script type="text/javascript" 
     src="<c:url value='/resources/js/scroll-startstop.events.jquery.js'/>"></script> 

<script type="text/javascript" 
     src="<c:url value='/resources/js/jquery-ui-1.10.0.custom.min.js'/>"></script> 

<script type="text/javascript" 
     src="<c:url value='/resources/js/script-ini.js'/>"></script> 
<script type="text/javascript" 
     src="<c:url value='/resources/js/map/map.js'/>"></script> 
<script type="text/javascript" 
     src="//maps.google.com/maps/api/js?sensor=true&js?v=3.exp&libraries=places"></script> 

<script type="text/template" id="terminal-template"> 
    ... 
</script> 
<style> 
    .grey-terminal { 
     background-color: rgb(226, 226, 226); 
    } 
</style> 
<script type="text/javascript" 
     src="<c:url value='/resources/js/addTerminal.js'/>"></script> 
<script>jQuery.noConflict();</script> 
... 

你可以建議另一種方式?

+0

jQuery的未加載....和noConflict應在使用腳本不是腳本... – 2014-11-22 17:49:51

+0

@Bhojendra後的前 - C-鏈接尼泊爾請閱讀我的更新。你能建議如何重寫這段代碼嗎? – gstackoverflow 2014-11-22 17:53:00

回答

2

當您撥打jQuery.noConflict();時,不再將jQuery$變量相關聯。

因此,像$().click$(selector)這樣的東西將會拋出錯誤。相反,你可以做這樣的事情:

jQuery.noConflict(); 
jQuery('a.try').click(handler); 
jQuery(window).height(); 

或者,您也可以將jQuery來一個新的變量,就像這樣:

var j$ = jQuery.noConflict(); 
j$('a.try').click(handler); 
j$(window).height(); 

http://jsfiddle.net/wL4mc03a/

編輯

至於調度事件,你可以這樣做的一種方法(使用jQuery)是trigger事件。假設您的代碼如下所示:

jQuery(document).on('keydown', function(e){ 
    if (e.which === 42) { 
     alert('That is the key to life!'); 
    } 
}); 

稍後,您可以觸發此事件。我們不會使用字符串('keydown')來觸發事件,而是創建一個jQuery事件並傳遞它。

var evt = jQuery.Event('keydown'); 
evt.which = 42; 

jQuery(document).trigger(evt); 
+0

是否有可能重寫var'event = new KeyboardEvent('keydown'); $(「#pac-input」)。dispatchEvent(event);'沒有jQuery? – gstackoverflow 2014-11-22 18:38:47

+0

是的,你可以。但是,您需要將它稱爲'$('#pac-input')。get(0).dispatchEvent(event)'。 'get'將返回DOM節點(而不是jQuery包裝的對象)。但是,如果你想要這樣做的話(我推薦),你可以'觸發'事件,如$('#pac-input')。trigger('keydown')'(如果你需要指定('#input')。trigger('keydown',{which:42})' - 第二個對象模擬事件對象 – Jack 2014-11-23 18:55:59

+0

** var event = new KeyboardEvent('keydown',{which:42}); $(「#pac-input」)。get(0)。dispatchEvent(event); **當我調用這個時,我看到它執行當我鍵入文本時調用的事件。我需要調用輸入事件 – gstackoverflow 2014-11-23 20:09:42

相關問題