Запутался с jqery ... (function ($) { ... })(jQuery); [РЕШЕНО]

Главные вкладки

Аватар пользователя tolik109 tolik109 25 июля 2014 в 15:15

Добрый день дорогое сообщество!
Не выполняется скрипт в Drupal 7 почему то, терпения уже не хватает, не пойму что не так сделал, ткните плз.
Спасибо!

function ($) {
$(document).ready(function() {
function CalcWPLen () {
var length = $('#inputRoomLength').val();
var width = $('#inputRoomWidth').val();
var height = $('#inputCeilingHeight').val();
var wp_cost = 2360;
var wp_width = $('#inputWhalwidth').val();
var wp_length = $('#inputWhallength').val();
if (length>0 && width>0 && height>0) {
    var perimiter = length*2+width*2;
    var sq = perimiter*height;
    var wp_sq = wp_width*wp_length;
    var result = Math.ceil(sq/wp_sq*1.1);
        var resultcost = result*wp_cost;
    $('#calc_result strong').text('Вам потребуется '+result+' '+fixword(result, "рулон", "рулона", "рулонов")+ ' — '+resultcost+'р.');
    $('input[name=quantity]').val(result);
} else {
    alert("Заполните все поля для расчета");
}
return false;
}  
   });

})(jQuery);

Комментарии

Аватар пользователя tolik109 tolik109 25 июля 2014 в 16:40

sergeybelya wrote:
Так он и не сработает, ведь в скрипте просто определена функция CalcWPLen, но нигде не вызвана.

Буду краток )
подключал через drupal_add_js это дело, а на странице форма с инпутами из которых скрипт берет значение и кнопица
button type="button" class="btn btn-orange" id="calc_process" onClick="CalcWPLen(); return false;
Как надо правильно оформить код в js файле?
Ругается на Uncaught ReferenceError: CalcWPLen is not defined
onclick

Аватар пользователя sergeybelya sergeybelya 25 июля 2014 в 16:57

tolik109 wrote:
sergeybelya wrote:
Так он и не сработает, ведь в скрипте просто определена функция CalcWPLen, но нигде не вызвана.

Буду краток )
подключал через drupal_add_js это дело, а на странице форма с инпутами из которых скрипт берет значение и кнопица
button type="button" class="btn btn-orange" id="calc_process" onClick="CalcWPLen(); return false;
Как надо правильно оформить код в js файле?
Ругается на Uncaught ReferenceError: CalcWPLen is not defined
onclick

Потому что функция определена внутри другой функции и глобально не видна

Аватар пользователя whiesam whiesam 25 июля 2014 в 16:43

"drupby" wrote:
а в чем смысл такой конструкции можешь объяснить?

Скобка в начале. Помню что поэтому не работал у меня скрипт.
"sergeybelya" wrote:
Так он и не сработает, ведь в скрипте просто определена функция CalcWPLen, но нигде не вызвана.

Именно. Чёт сразу не видел.
"tolik109" wrote:
button type="button" class="btn btn-orange" id="calc_process" onClick="CalcWPLen(); return false;

Я не гуру в js. Но у меня никогда через onClick в Drupal не срабатывало)
Не парь мозг повесь сабмит прямо в коде js.

Аватар пользователя drupby drupby 25 июля 2014 в 17:01

"whiesam" wrote:
у меня никогда через onClick в Drupal не срабатывало)

http://toster.ru/q/113419
"whiesam" wrote:
Скобка в начале. Помню что поэтому не работал у меня скрипт.

я не про скобку спрашивал, я про $(document).ready() внутри (function() {})()
читай хотя бы документацию внимательно прежде чем раздавать советы
http://api.jquery.com/ready/

Аватар пользователя tolik109 tolik109 25 июля 2014 в 17:28

ой.
да.. правда.. дело в onClick было.. я что то ни разу не сталкивался а тут вот оно что ))
Спасибо огромное!!!

(function($) {
$(document).ready(function(){

function fixword(_number, _case1, _case2, _case3)
{
    var base = _number - Math.floor(_number / 100) * 100;
    var result;
    if (base > 9 && base < 20) {
        result = _case3;
    } else {
        var remainder = _number - Math.floor(_number / 10) * 10;
        if (1 == remainder) result = _case1;
        else if (0 < remainder && 5 > remainder) result = _case2;
        else result = _case3;
    }
    return result;
}

$("#calc_process").bind('click', function() {
var length = $('#inputRoomLength').val();
var width = $('#inputRoomWidth').val();
var height = $('#inputCeilingHeight').val();
var wp_cost = $('#inputCost').val();
var wp_width = $('#inputWhalwidth').val();
var wp_length = $('#inputWhallength').val();
if (length>0 && width>0 && height>0) {
    var perimiter = length*2+width*2;
    var sq = perimiter*height;
    var wp_sq = wp_width*wp_length;
    var result = Math.ceil(sq/wp_sq*1.1);
        var resultcost = result*wp_cost;
    $('#calc_result strong').text('Вам потребуется '+result+' '+fixword(result, "рулон", "рулона", "рулонов")+ ' — '+resultcost+'р.');
    $('input[name=quantity]').val(result);
} else {
    alert("Заполните все поля для расчета");
}
return false;
        });
});

})(jQuery);