2013-01-06 100 views
1

這可能很基本,但是這個問題需要我花幾個小時才能弄清楚,我還沒有找到任何解決方案。我使用的是WordPress 3.5,我在這個文件夾中有一個名爲general.js的外部javascript文件:wp-content/themes/[folder_name]/js。在general.js中,我編寫了一個名爲hideError的函數,基本上可以隱藏從我的文本框中彈出的錯誤標籤。在wordpress中無法調用javascript函數

(function($) { 
function hideErrorLabel(i) { 
    //codes for handling label 
} 
})(jQuery); 

我稱它是這樣的:

<span class="component-wrapper" onmouseover="hideErrorLabel(0)"> 
    <input type="text" name="txtName" size="10" /> 
    <label for="txtName" class="error">All field must be filled.</label> 
</span> 

傳遞一個參數,因爲這些文本框是數組。 奇怪的是,它給了我javascript錯誤「hideErrorLabel未定義」。什麼地方出了錯?請幫忙。

回答

1

只是刪除的是JavaScript代碼的第一和最後一行。你隱藏你的功能!在任何腳本標籤中公開聲明。

<script type="text/javascript> 
function hideErrorLabel(i) { 
    //codes for handling label 
} 
</script> 
+0

感謝您的解決方案。 (function($){})(jQuery);限制我的功能只能在它內部使用,所以我決定將hideErrorLabel函數移到外面並且它可以工作。 –

2
(function($) { 
/* code */ 
})(jQuery); 

將確保您提供的/* code */在解析DOM後執行。但是,當解析器嘗試插入onmouseover屬性時,這會阻止定義hideErrorLabel

爲了解決這個問題,你應該使用修改事件處理程序/* code */部分:

(function($) { 
function hideErrorLabel(i) { 
    //codes for handling label 
} 

$('.component-wrapper').on('mouseover',hideErrorlabel); 
})(jQuery); 
+0

請注意,即使在固定示例中,「hideErrorLabel」仍然限於IIFE的功能範圍,並且在全局範圍內無法訪問。儘管這是一個很好的做法,因爲您通常不希望(也需要)將本地函數泄漏到全局範圍。另一方面,你可能想要在DOM ready *處綁定*,這可以通過用'jQuery(function($){)替換外部'(function($){...})(jQuery);'來完成。 ..});' –

+0

不錯,但是我們該如何處理參數呢? –

+0

@HenryGunawan:你沒有在原始編輯中處理參數,所以我忽略了它。通常你會創建一個小封裝:'('。'component-wrapper')。on('mouseover',function(){hideErrorlabel(0);});'。不過,我相信你的問題可以通過CSS解決,而且更容易,並且b)與停用的JS一起工作。 – Zeta

1

有幾個原因,這可能發生,最安全的答案,不是簡單的將是移動事件的代碼綁定英寸你也可以使用委託,如果你只是想要範圍函數,你不應該需要一個索引。如果您確實需要索引,則可以隱式獲取位置,或者使用數據集值通過PHP顯式提供一個。

這聽起來像你只需要像:

(function($) { 
    $(function() { 
    $(document).on('mouseover', '.component-wrapper', function(event) { 
     var $wrapper = $(event.currentTarget); 
     $wrapper.find('.error').hide(); 
    }); 
    }); 
})(jQuery); 

但你能適應它來調用外部函數或根據需要提供額外的邏輯。

+0

你也可以用'jQuery(function($){/ *在DOM就緒* /}運行)替換兩個外部函數;'' –