jQuery возвращает не число, только когда я использую вычитание

У меня проблема с jQuery, которую я не могу понять.

Если я делаю console.log($(window).width()/2), я получаю числовое значение.

Если я делаю $('.modal_box').outerWidth(), я получаю числовое значение.

Однако, если я попытаюсь сделать console.log($(window).width()/2 - $('.modal_box').outerWidth()), я получу NaN. Если я сделаю то же самое уравнение, но заменю - на +, оно сработает.

Ширина окна всегда шире .modal_box.

Почему это могло быть? Это очень расстраивает.


person Alex McCabe    schedule 18.12.2012    source источник
comment
вы пробовали этот console.log(($(window).width()/2) - ($('.modal_box').outerWidth()))   -  person defau1t    schedule 18.12.2012
comment
Да, это заставило его работать. Кажется довольно странным. В любом случае, спасибо. Я знаю, что это другой вопрос, но почему теперь modal_box не будет сидеть в центре. Он находится слева от страницы. Гах, не могу поймать перерыв.   -  person Alex McCabe    schedule 18.12.2012
comment
Это зависит от css для '.modal_box'. Я предполагаю, что без разметки '.modal_box' должен иметь 'position: absolute', быть прямым братом элемента body и иметь left установите на ($(window).width()/2) - ($('.modal_box').outerWidth()/2) , если вы хотите, чтобы он располагался в центре экрана.   -  person Danilo Radenovic    schedule 18.12.2012
comment
Ах вот где я ошибаюсь тогда. Я также предполагаю, что вы имеете в виду ребенка, поскольку он не может быть родным братом. Ха-ха. Но да, из-за того, как генерируется контент для модального окна, он не может быть прямым потомком.   -  person Alex McCabe    schedule 18.12.2012
comment
Я только что попробовал это здесь, и это работает. Спасибо. Придется найти другой способ сделать это на моем сайте. РЕДАКТИРОВАТЬ: На самом деле это работает и на моем сайте. Спасибо. Если вы предоставите это как ответ, я проголосую за него.   -  person Alex McCabe    schedule 18.12.2012
comment
@ defau1t, почему это имеет значение?   -  person phant0m    schedule 18.12.2012


Ответы (3)


Попробуй это

console.log(parseFloat($(window).width()/2) - parseFloat($('.modal_box').outerWidth()));
person algorhythm    schedule 18.12.2012
comment
width() и outerWidth() возвращает целые числа. - person Rocket Hazmat; 18.12.2012
comment
Ответ, который был здесь раньше, сработал. Спасибо. Теперь, чтобы выяснить, почему математика не находится непосредственно в центре div... - person Alex McCabe; 18.12.2012
comment
@RocketHazmat Да, но целое деление на 2 может быть числом с плавающей запятой. И каждый int можно разобрать как float ;) - person algorhythm; 18.12.2012
comment
@algorhythm: я думал, что JavaScript не различает целые числа и числа с плавающей запятой. - person Rocket Hazmat; 18.12.2012
comment
@RocketHazmat с parseInt вы теряете десятичные числа (за ','). с parseFloat он работает с десятичными знаками. - person algorhythm; 18.12.2012

Я попробовал это так же, как и вы, и это работает хорошо, даже с отрицательными значениями (при вычитании с большим числом). Вот скрипта, а вот код:

$(document).ready(function(){

    alert($('#someDiv').outerWidth());
    alert($(window).width());
    alert($('#someDiv').outerWidth() - $(window).width());
});

Я считаю, что ошибка кроется где-то в синтаксисе или, может быть, (длинный выстрел), если свойства css для ширины элемента не предоставлены.

Вот дополнительная информация:

Чтобы расположить его в центре экрана, '.modal_box' должен иметь 'position: absolute', быть прямым братом элемента body и иметь левое значение ($(window).width()/2) - ($('.modal_box').outerWidth()/2).

person Danilo Radenovic    schedule 18.12.2012

Имея дело с математикой и возвращаемыми ею значениями, я обычно предпочитаю явно анализировать значение до целого числа, чтобы получить только то значение, которое мне нужно. Мне также нравится делать код как можно более читабельным, например:

var w = parseInt($(window).width()/2);
var mb = parseInt($('.modal_box').outerWidth());

console.log(w - mb);

Таким образом, проще console.log() получить оба значения и понять, почему операция не возвращает число.

Ваше здоровье!

person Wallace Sidhrée    schedule 18.12.2012