2016-07-08 81 views
0

我想執行在腳本開始時定義的函數,讓我們調用此函數進行初始化。這個函數也使用了一個變量,讓我們稱之爲登錄,它是在定義了變量login之後由一個包含我的jquery腳本文件的php文件定義的。除非調整大小或點擊功能,否則不會加載函數

PHP/HTML:

<script type="text/javascript"> 

login   = '<?php echo $login; ?>'; 
... 
</script> 
<!-- script is included --> 
<script type="text/javascript" src="script.js"></script> 

的jQuery:

function initialize(){ 
    $("." + login).remove(); 
} 

jQuery.moreContent = function moreContent() 
{ 
    //more content is loaded 
    ... 
    initialize(); 
} 

那麼moreContent功能加載,我可以看到更多的內容出現在我的屏幕上,但initialiye沒有加載。只有當我使用像大小調整功能(在的script.js文件末尾),它的工作原理

的jQuery(在腳本的末尾):

//load function initialize 
initialize(); 
//this function doesnt work too, I tested if it even loads and it does (used a number that was increased by one whenever function was loaded which actually happened...) 
//however the wished element with the class of variable login is not removed 

//resize function 
$(window).resize(initialize); 
//this one suddenly works 
... 

我不知道爲什麼突然有工作其它功能,以及爲什麼它在其它情況下不工作

+0

您需要等到該文件是訪問'$前準備好( 「」 +登錄)'元素,更多的細節[這裏](https://learn.jquery.com/using-jquery-核心/文檔就緒/) – Titus

+0

我做過...我甚至試圖將類更改爲登錄的價值,這也沒有幫助:/ – Moritz

+0

可能是初始化函數被覆蓋在jquery範圍內嘗試更改名稱一段時間。 – Viney

回答

0

你需要用你的代碼,並使其運行一次的文件已經準備好,像這樣:

$(document).ready (function(){ 
    // run all your functions here 
}); 
+0

正如其中一條評論中提到的那樣,我做到了這一點... – Moritz

0

也許變量登錄是空的另一個功能,或者你給予不同的價值。

有一個全局變量嘗試測試它,就像

window.login = script_php 

,然後再試一次,在這方面,登錄變量是全球性的,或通過這個變量作爲函數的參數。

+0

我甚至在登錄值中輸入了它,但它沒有工作... – Moritz

+0

然後嘗試在document.ready中添加初始化函數,而不是所有的函數。在加載新內容時,當你再次調用函數初始值設定項時,將其放入文檔中準備好 – xploshioOn

0

然後加載moreContent函數,我可以看到更多的內容出現在我的屏幕上,但初始化未加載。

這不完全是這樣發生的。你已經直接連接的功能作爲方法jQuery對象,但沒有調用它

jQuery.moreContent = function moreContent() 
{ 
    //more content is loaded 
    ... 
    initialize(); 
} 

你不會從做這種方式得到任何好處卓有成效。您剛剛在object(本例中爲jQuery)中添加了一個尚未調用的方法。無論如何,您不需要將其作爲方法添加到jQuery對象本身。如下所示,您可以輕鬆完成此操作。

function initialize(){ 
    $("." + login).remove(); 
} 

// this is a global function right now, use it anywhere you want. 
function moreContent() 
{ 
    //more content is loaded 
    ... 
    initialize(); 
} 

// document ready... 
$(function(){ 
    moreContent(); 
}); 

可以重新排列的代碼,並刪除不必要的function層(取決於你的代碼結構),並使用它像這樣。

$(function(){ 
    // more content... 

    initialize(); 
}); 

如果我使用像大小調整功能(在的script.js文件末尾),它的工作原理

它的工作,因爲它是由jQuery的直接連接到windowresize事件。

$(window).resize(function(){ 
    // The code inside will work whenever user resizes the window. 
    // It does not need to be hooked up inside document ready. 
}); 

我不知道爲什麼突然與其他功能的工作原理,以及爲什麼它在其它情況下不工作

它的工作的事件處理程序內部的原因是因爲你迷上了您的功能作爲它們的回調函數運行。您已在clickresize事件中正確設置它,但在load事件中沒有正確設置它。在load事件中,您剛剛創建了一個函數,並將其作爲方法添加到jQuery對象中,但未調用它。唯一的唯一方法是function runs inside JavaScript is when you suffix parenthesis

function demo() 
{ 
    // do something... 
    return "Done"; 
} 

// a named function "demo" got created, but not invoked. 

demo; // returns the whole function literal, not invoked yet. 

demo(); // invoked, returns Done 

所以從這個持續,將其添加爲方法jQuery,直到你調用它例如將不會加載它,

jQuery.myNewMethod = function myNewMethod() { 
    return "Hey there :)"; 
} 

// jQuery loaded, but where is my method ?? (@[email protected]) 
// let's invoke it then... 

jQuery.myNewMethod(); // invoked the function using parenthesis! 
// returns "Hey there :)" 
// Now i can see you go (^__^) 
+0

這樣做的好處是我可以在php中加載這個函數,我不能用你的方法... – Moritz

+0

我調用時調用它在php ... – Moritz

+0

_「我這樣做的成果很好,我可以在php中加載這個函數,我不能用你的方法」_我不同意,你的意思是你不能調用一個普通的JavaScript函數除了這個? – Rohit416

相關問題