Что я делаю не так в этом вызове javascript?

#javascript #html #jquery

#javascript #HTML #jquery

Вопрос:

У меня есть это в html

 <div class="btn-group tags_select">
<a href='' id='<?php echo "plus".$base['id']?>' class='btn btn-flat btn-primary btn-sm'><i class='fa fa-plus'></i><?php if(in_array("manageAsset",$perms)) {  echo $base['id']; }?></a>
<a href='' id='<?php echo "minus".$asset['id']?>' class='btn btn-flat btn-success btn-sm disabled'><i class='fa fa-minus'></i><?php if(in_array("manageAsset",$perms)) {  echo $asset['id']; }?></a>
</div>  

это javascript:

 <script type="text/javascript" language="javascript">
var array = [];
var len;


    $('.tags_select a').click(function() {

        var value = $(this).text();
        var input = $('#asset_array');

        if($('plus' value).click()){
            console.log("clicked plus");
            document.getElementById('plus' value).classList.add('disabled') ;
            document.getElementById('minus' value).classList.remove('disabled');
            if(!array.includes(value)){
                array.push(value);
                console.log(array);
                input.val(array.toString());
            }
        }

        else if($('minus' value).click()){
            console.log("clicked minus");
            document.getElementById('minus' value).classList.add('disabled') ;
            document.getElementById('plus' value).classList.remove('disabled');
            if(array.includes(value)){
                array.pop(value);
                console.log(array);
                input.val(array.toString());
            }
        }




        return false;
    });
  
  </script>  

Есть 2 кнопки, минус отключен, а плюс включен. Когда я нажимаю на плюс, минус должен быть включен, а плюс выключен (как есть), но вывод для минуса дает мне только журнал для (‘нажал плюс’). Означает ли это, что мне нужны отдельные вызовы идентификаторов в документе?

введите описание изображения здесь

Ответ №1:

Синтаксис вашего условного выражения здесь не будет работать. Вы не сможете проверить, была ли нажата ссылка, проверив if($('plus' value).click()){ , потому что ваше условие эффективно проверяет возвращаемое значение $('plus' value).click() , а click() метод jQuery возвращает nothing / null .

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

$('.tags_select a').click(function(evt) {

Аргумент там содержит информацию, к которой вы можете получить доступ о цели события, которая в данном случае является <a> тегом привязки, который был нажат.

Итак, что вы могли бы проверить в этом случае evt.target.id , это то, что будет содержать либо «плюс», либо «минус»:

 if(evt.target.id.includes("plus")) {
  //proceed with logic for "plus" link having been clicked
} else if(evt.target.id.includes("minus")){
  //proceed with logic for "minus" link having been clicked
}
  

Имейте в виду, includes() метод, который я использую здесь, — это ванильный javascript, и у jQuery может быть вызов, который делает то же самое. Хотя никакого вреда в смешивании этих двух нет.

Вы можете найти более подробную информацию event.target здесь, если хотите: https://developer.mozilla.org/en-US/docs/Web/API/Event/target

Комментарии:

1. О, я не знал, смогу ли я их безопасно смешивать. Спасибо за подробное объяснение, это очень помогло.

2. При использовании вашего кода происходит одна странная вещь: в отладчике иногда не регистрируется щелчок пользователя…

3. … Проблема вызвана fa fa-минус и fa fa-плюс… Еще раз спасибо за отличное решение.

4. Я очень рад, что мое решение помогло. Как бы то ни было, у меня этот код работает так, как ожидалось, в этой скрипке jsfiddle.net/flyingace/jy0ub24c/15 и fa fa-minus «и fa fa-plus » не вызывают никаких проблем. Может быть, взгляните на это и посмотрите, помогает ли это вообще.

5. Он регистрирует щелчок, но цвет не меняется и функция не выполняется… я добавлю картинку. Это происходит только в том случае, если я нажимаю непосредственно на число или плюс / минус, если немного от них, он делает именно то, что должен.

Ответ №2:

При вызове $('minus' value).click() вы запускаете событие щелчка, а не оцениваете, был ли нажат этот элемент.

Комментарии:

1. Да, это так. Спасибо 🙂