#javascript #html #jquery #css
#javascript #HTML #jquery #css
Вопрос:
У меня проблема с первым типом и n-м типом (1), чтобы скрыть первый элемент класса.
В моем скрипте пользователь может добавить вводимый текст, и у него будет выбор удалить эти вводимые данные. первый элемент (который является первым элементом) не будет скрыт, поэтому без ссылки delate .
Проблема в том, что при добавлении первого типа или n-го типа (1) все ссылки удаления скрыты. Для скрипта каждый добавленный элемент div является первым, поэтому удаление все время скрыто.
Это мой скрипт:
$(function() {
var max_fields = 10;
var $wrapper = $(".containerDim");
var add_button = $(".add_form_field");
$(add_button).click(function(e) {
e.preventDefault();
const vals = $("> .item input[name^=poids]",$wrapper).map(function() { return this.value }).get()
const val = vals.length === 0 ? 0 : vals.reduce((a, b) => a b);
if ($("> .item",$wrapper).length < max_fields amp;amp; val < 300) {
const $form_colis = $(".item").first().clone();
$form_colis.find("input").val("");
// $wrapper.append($form_colis); //add input box
$('.item', $wrapper).last().after($form_colis);
} else {
var err_msg = 'Veuillez nous contacter!';
//alert(err_msg);
window.alert(err_msg);
}
});
$wrapper.on("click", ".delete", function(e) {
e.preventDefault();
$(this).parent('div').remove();
})
});
.delete:nth-of-type(1) {
display:none;
}
.delete:first-of-type {
display: none;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="dimensions" class="row item">
<div class="col-sm-3">
<label>Longueur(cm):</label>
<input type="number" min="0" name="longueurs[]" id="length" value="<?php //echo $length;?>" required>
</div>
<div class="col-sm-3">
<label>Largeur(cm):</label>
<input type="number" min="0" name="largeurs[]" id="width" value="<?php //echo $width;?>" required>
</div>
<div class="col-sm-3">
<label>Hauteur(cm):</label>
<input type="number" min="0" name="hauteurs[]" id="height" value="<?php //echo $height;?>" required>
</div>
<div class="col-sm-2">
<label>Poids(Kg):</label>
<input type="text" min="0" name="poids[]" id="weight" value="<?php //echo $weight;?>"required>
</div>
<!--div class="col-sm-1 "-->
<br>
<a href="#" class="delete">Delete</a>
<!--/div-->
</div> <!-- row dimensions item -->
Есть какое-либо решение для решения этой проблемы.
Заранее благодарю вас
Комментарии:
1. предоставленный вами jQuery и селекторы DOM не совпадают с HTML
Ответ №1:
Внутри оболочки .containerDim
есть .items
и только они могут быть использованы в качестве соответствующей ссылки на индексацию:
.containerDim .item:nth-child(1) .delete {}
или
.containerDim .item:first-of-type .delete {}
jQuery(function($) {
const max_fields = 10;
const $wrapper = $(".containerDim");
const add_button = $(".add_form_field");
$(add_button).click(function(e) {
e.preventDefault();
const vals = $(".item input[name^=poids]", $wrapper).map(function() {
return this.value
}).get()
const val = vals.length === 0 ? 0 : vals.reduce((a, b) => a b);
if ($(".item", $wrapper).length < max_fields amp;amp; val < 300) {
const $itemClone = $(".item", $wrapper).eq(0).clone();
$("input", $itemClone).val("");
$wrapper.append($itemClone); // use .append()
} else {
window.alert('Veuillez nous contacter!');
}
});
$wrapper.on("click", ".delete", function(e) {
e.preventDefault();
$(this).closest('.item').remove(); // use .closest() and go for a specific class!
});
});
.containerDim .item {
padding: 20px;
border: 1px solid #ddd;
}
.containerDim .item:nth-child(1) .delete{
display: none;
}
<div class="containerDim">
<!-- Remove the ID id="dimensions" you cannot have duplicated iDs -->
<div class="row item">
<div class="col-sm-3">
<label>Longueur(cm):</label>
<input type="number" min="0" name="longueurs[]" id="length" value="10" required>
</div>
<div class="col-sm-3">
<label>Largeur(cm):</label>
<input type="number" min="0" name="largeurs[]" id="width" value="10" required>
</div>
<div class="col-sm-3">
<label>Hauteur(cm):</label>
<input type="number" min="0" name="hauteurs[]" id="height" value="10" required>
</div>
<div class="col-sm-2">
<label>Poids(Kg):</label>
<input type="text" min="0" name="poids[]" id="weight" value="1" required>
</div>
<a href="#" class="delete">Delete</a>
</div>
</div>
<button class="add_form_field">ADD MORE</button>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>