#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. Да, это так. Спасибо 🙂