2014-09-06 2 views
1

Я прочитал несколько статей о том, как добавить JavaScript на страницы WordPress, хотя это кажется слишком сложным для того, что мне нужно. У меня есть этот небольшой скрипт (см. Ниже), и я хочу, чтобы он работал только на одной странице. Я думал, добавив его в <script> тегах после основного содержания будет делать трюк, но я получаю следующее сообщение об ошибке в консоли:Отдельная функция JavaScript на отдельном WordPress Page

Uncaught TypeError: undefined is not a function

Даже если сценарий отлично работает в консоли, она не работает.

Для этого сценария мне нужно использовать сложные методы или есть более простой?

$('#tSubmit').on('click', function() { 
    var amt = +$('#tCount').val(), 
     tier = $('#tType').val(), 
     h = +$('#tH').val() > 0 ? +$('#tH').val() : 0, 
     m = +$('#tM').val() > 0 ? +$('#tM').val() : 0, 
     s = +$('#tS').val() > 0 ? +$('#tS').val() : 0, 
     time = ((h*60+m)*60+s)/amt; 
    alert('Individual time for Tier ' + tier + ' troops: ' + time.toFixed(2) + ' seconds'); 
}); 
+0

У вас есть jQuery, который включен на вашу страницу? – bencripps

+0

Вы уверены, что ваш код будет выполнен после того, как ваша форма будет отображаться на странице? –

+2

wordpress theme, вероятно, используя noConflict, попробуйте заменить '$' на 'jQuery' – charlietfl

ответ

4

В WordPress Jquery загружается с помощью функции jQuery.noConflict(), что означает, что переменная $ является псевдонимом jQuery так, чтобы не вступать в противоречие с другими библиотеками Javascript.

Вы можете включить ваш javascript в свой шаблон страницы или даже в пределах содержимого сообщения (если вы используете текстовый редактор, а не визуальный), при условии, что вы заменяете $ на jQuery.

jQuery('#tSubmit').on('click', function() { 
    var amt = +jQuery('#tCount').val(), 
     tier = jQuery('#tType').val(), 
     h = +jQuery('#tH').val() > 0 ? +jQuery('#tH').val() : 0, 
     m = +jQuery('#tM').val() > 0 ? +jQuery('#tM').val() : 0, 
     s = +jQuery('#tS').val() > 0 ? +jQuery('#tS').val() : 0, 
     time = ((h*60+m)*60+s)/amt; 
    alert('Individual time for Tier ' + tier + ' troops: ' + time.toFixed(2) + ' seconds'); 
}); 

Если вы не хотите, чтобы изменить код, вы можете передать переменную jQuery в функцию, которая принимает $ в качестве аргумента, и использовать свой код, как есть.

(function($){ 
    // your code goes here and jQuery is known as $ 
    // $(document).on()... or whatever 
})(jQuery); 
0

Почему бы вам не попробовать создать отделенный JS файл для этой функции (а также выполнить его на JQuery (документ) .ready()), а затем обратитесь к нему с вашей страницы с wp_enqueue_script (» scrip name ',' script url ', array (' jQuery ')). Это приведет к загрузке вашего скрипта после загрузки jQuery.