Функция подсчета JQuery. если заявление - PullRequest
1 голос
/ 23 сентября 2010

Я пытаюсь написать немного jquery: если есть только один экземпляр div, у которого есть класс «option», возьмите атрибут href и перенаправьте на этот href, это то, что мне нужно до сих пор

<script type="text/javascript">

var count =('Size: ' + $('.option').size());

if (count = 1) {

    $('.readmore a').each(function () {
        var url = $(this).attr('href');
        window.location.replace(url);
    })              

} 
else {

   alert("more than 1");    
}
</script>

Он успешно перенаправляет на правильный URL-адрес, но не работает должным образом, потому что, если существует более 1 экземпляра div.option, он все еще перенаправляет и не предупреждает «больше, чем 1», кто-либо помогает?

Я предполагаю, что в одной точке скрипта число равно = 1, и jquery должен выполнить его перенаправление, но я хочу, чтобы он посчитал все экземпляры, а затем определил, перенаправить или нет

Ответы [ 3 ]

1 голос
/ 23 сентября 2010

если вы сравниваете числа, лучше использовать === " оператор строгого сравнения "

if ( $('.option').length === 1 ){
        window.location.replace( $('.readmore a').attr('href') );
}
else{
    alert("more than 1");   
}
1 голос
/ 23 сентября 2010

if (count = 1) всегда имеет значение true, поскольку устанавливает число, равное 1! .if (count == 1) будет истинным, только если count равно 1. Эти два значения не обязательно должны быть одного типа.if (count === 1) будет истинным, только если два равны и имеют одинаковый тип.

Количество должно быть равным количеству, а не строка, содержащая "Size: ...".

Вы должны использоватьlength свойство вместо .count(), так как оно немного быстрее (это в соответствии с jQuery ).

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

I'mпри условии, что HTML-код находится перед тегами <script> .... если нет, вам нужен готовый документ: `$ (function () {...});

<!-- HTML up here ... -->
<script type="text/javascript">
(function() {
var count =($('.option').length);

// "count = 1" SETS COUNT EQUAL TO 1!!!!!
if (count === 1) {

      // Why use each? We are redirecting to the first href.
    $('.readmore a').each(function () {
        var url = $(this).attr('href');
        window.location.replace(url);
    })              

} 
else {

   alert("more than 1... specifically " + count);    
}
})();
</script>

Наконец, нетпричина использовать .each(), так как вы будете перенаправлять после первого .readmore a .... Может быть, вы должны проверить, сколько существует .readmore a s?Во всяком случае, для меня это имеет больше смысла:

<!-- HTML up here ... -->
<script type="text/javascript">
(function() {
var count =($('.option').length);

// "count = 1" SETS COUNT EQUAL TO 1!!!!!
if (count === 1) {

    var url = $('.readmore a').first().attr('href');
    window.location.replace(url);

} 
else {

   alert("more than 1... specifically " + count);    
}
})();
</script>

jsFiddle пример w 2

jsFiddle пример w1

1 голос
/ 23 сентября 2010

Вы устанавливаете счет в 'Size: ' + $('.option').size(), что делает его строкой. Затем вы сравниваете его с int. Кроме того, if (count = 1) должно быть if (count == 1). Обратите внимание на два знака равенства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...