Множественный выбор тега под одним идентификатором - PullRequest
1 голос
/ 14 февраля 2020

Я добавляю элемент множественного выбора в идентификатор с именем append, как показано ниже.

<div id="append">
    <select name="color[]" id="colorsData1" class="form-control">
        <option>--Select any One--</option>
        <option>Red</option>
        <option>Yellow</option>
        <option>Blue</option>
        <option>Black</option>
    </select>

    <select name="color[]" id="colorsData2" class="form-control">
        <option>--Select any One--</option>
        <option>Red</option>
        <option>Yellow</option>
        <option>Blue</option>
        <option>Black</option>
    </select>
    <select name="color[]" id="colorsData3" class="form-control">
        <option>--Select any One--</option>
        <option>Red</option>
        <option>Yellow</option>
        <option>Blue</option>
        <option>Black</option>
    </select>
</div>

Теперь, чтобы предотвратить дублирование данных, я хочу использовать условие, если пользователь выбирает красный цвет и как красный цвет уже был выбран ранее в colorsData1 или colorsData2, я хочу предупредить пользователя. Как проверить, соответствует ли какой-либо из выбранных параметров перед текущим выбранным параметром?

Причина использования множественного выбора, а не флажков, заключается в том, что я на самом деле делаю сайт электронной коммерции. А для управления запасами я клонирую div please see this image, где поставщик может загружать изображения в соответствии с выбранными цветами. Я также добавляю поле загрузки, если нет дублирования цвета. Если выбранная опция не повторяется, весь мой div будет выглядеть следующим образом. Please see another image.

И причина, по которой я проверяю дублирование цветов, заключается не в том, чтобы предупредить продавца, а в том, что касается меня. Сразу после того, как поставщик делает выбор цвета, если цвет уже был выбран, прежде чем я хочу перевести свой код в другое состояние, где нет кода для добавления поля загрузки файла. Смотрите, у продавца могут быть кроссовки Nike разных размеров с одинаковыми цветами. Размеры не имеют значения при онлайн-покупках, так как они не могут сказать им, подходит ли он им, глядя на изображение. Итак, я разрешаю поставщику загружать товары одинакового цвета, но разных размеров для управления запасами. Есть кнопка с идентификатором addnew, после которой мой код jquery после нажатия этой кнопки:

$('#addnew').on('click', function(){ 
        num = num+1;
        let html = '';
        html = '<div class="form-group row div"><div class="col-md-2 col-lg-2"><select name="color[]" id="colorsData'+num+'" class="form-control selectebox"><option>--Select any One--</option></select></div><div class="col-md-3 col-lg-3"><select class="select2 form-control" name="size[]" multiple="multiple" id="sizesData'+num+'"></select></div><div class="col-md-2 col-lg-2"><input type="number" placeholder="availability" name="stock" class="form-control h-100"></div><div class="col-md-2 col-lg-2"><input class="form-control h-100" value="" type="text" name="price[]" placeholder="price"></div><div class="col-md-3 col-lg-3"><input class="form-control h-100" value="" type="text" name="discount[]" placeholder="discount"></div></div>';
        $('#append').append(html);
        if(num == 1){
            html = '<div class="form-group row image"><div class="col-md-12 col-lg-12" style="display:inherit"><a href="/vendor/filemanager/dialog.php?type=4&amp;field_id=thumbnail'+num+'&amp;descending=1&amp;sort_by=date&amp;lang=undefined&amp;akey=061e0de5b8d667cbb7548b551420eb821075e7a6" class="btn iframe-btn btn-primary" type="button"><i class="fa fa-picture-o"></i> Choose</a><input id="thumbnail'+num+'" class="form-control h-100" value="" type="text" name="image[]"></div></div>';
            $('#append').append(html);
            responsive_filemanager_callback('thumbnail'+num);
        } else {
            var selected_color = []; 
                $(".selectebox").on('change',function(){  console.log(selected_color)
                if(jQuery.inArray( this.value, selected_color)){
                    alert('duplicate color')
                } else {
                    html = '<div class="form-group row image"><div class="col-md-12 col-lg-12" style="display:inherit"><a href="/vendor/filemanager/dialog.php?type=4&amp;field_id=thumbnail'+num+'&amp;descending=1&amp;sort_by=date&amp;lang=undefined&amp;akey=061e0de5b8d667cbb7548b551420eb821075e7a6" class="btn iframe-btn btn-primary" type="button"><i class="fa fa-picture-o"></i> Choose</a><input id="thumbnail'+num+'" class="form-control h-100" value="" type="text" name="image[]"></div></div>';
                    $('#append').append(html);
                    responsive_filemanager_callback('thumbnail'+num);
                }
                selected_color.push($(this).val());
            });
        }

    })

и следующий код HTML

<div class="page-body">
<form action="{{ route('products.store') }}" method="POST">
    @csrf
    <div class="row">
        <div class="col-sm-12">
            <div class="card">
                <div class="card-header">
                    <h5>What you're selling</h5>
                </div>
                <div class="card-block">
                    <div class="row">
                        <div class="col-12">
                            <div class="form-group row">
                                <div class="col-md-4 col-lg-2">
                                    <label for="name" class="block">Product Name *</label>
                                </div>
                                <div class="col-md-8 col-lg-10">
                                    <input name="name" type="text" class="required form-control" id="name">
                                </div>
                            </div>
                            <div class="form-group row">
                                <div class="col-md-4 col-lg-2">
                                    <label for="slug" class="block">Product Slug *</label>
                                </div>
                                <div class="col-md-8 col-lg-10">
                                    <input name="slug" type="text" class="required form-control" id="slug">
                                </div>
                            </div>
                            <div class="form-group row">
                                <div class="col-md-4 col-lg-2">
                                    <label for="category-2" class="block">Category *</label>
                                </div>
                                <div class="col-md-8 col-lg-10">
                                    <select name="category_id" id="category_id" class="requires form-control">
                                        <option selected disabled>--Product Category--</option>
                                        <option value="">Hair</option>
                                        <option value="">Perfumes</option>
                                        <option value="">Shoes</option>
                                    </select>
                                </div>
                            </div>
                            <div class="form-group row">
                                <div class="col-md-4 col-lg-2">
                                    <label for="brand-2" class="block">Brand *</label>
                                </div>
                                <div class="col-md-8 col-lg-10">
                                    <select name="brand_id" id="brand_id" class="requires form-control">
                                        <option selected disabled>--Product Brand--</option>
                                        <option value="">Nike</option>
                                        <option value="">Zivah</option>
                                        <option value="">Caliber</option>
                                    </select>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <div class="row">
        <div class="col-sm-12">
            <div class="card">
                <div class="card-header">
                    <h5>General Information</h5>
                </div>
                <div class="card-block">
                    <div class="row">
                        <div class="col-12">
                            <div class="form-group row">
                                <div class="col-md-4 col-lg-2">
                                    <label for="description-2" class="block">Product description *</label>
                                </div>
                                <div class="col-md-8 col-lg-10">
                                    <textarea name="description" id="description" rows="10" class="form-control editor"></textarea>
                                </div>
                            </div>
                            <div class="form-group row">
                                <div class="col-md-4 col-lg-2">
                                    <label for="description-2" class="block">Video URL </label>
                                </div>
                                <div class="col-md-8 col-lg-10">
                                    <input type="url" name="video" placeholder="video url" class="form-control">
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <div class="row">
        <div class="col-sm-12">
            <div class="card">
                <div class="card-header">
                    <h5>SKU Information</h5>
                    <br>
                    <span class="hint">Click on the plus button to add the SKU of the product.</span>
                </div>
                <div class="card-block">
                    <div class="row">
                        <div class="col-12">
                            <div id="append"></div>
                            <div class="form-group text-center">
                                <button type="button" class="btn btn-primary" id="addnew"><span class="icofont icofont-ui-add"></span></button>
                                <button type="button" class="btn btn-danger" id="delete"><span class="icofont icofont-ui-delete"></span></button>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <div class="row">
        <div class="col-12">
            <input type="submit" name="submit" value="Save Changes" class="btn btn-success pull-right" id="submit">
        </div>
    </div>

</form>

* 1021. *

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020
  1. Добавить CSS цвет класса к каждому раскрывающемуся списку class="form-control color"
  2. Добавить уникальное значение для каждого параметра в раскрывающемся списке <option value="1" >Red</option>
  3. Добавить к прослушивателю события изменения все раскрывающиеся списки - selectcolor(this).
  4. "selectcolor" функция проверит дублирование.

<!DOCTYPE html>
<html>
<head>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
	<script>
		function selectcolor(a) {
			console.log(a);
			var data_list = new Set();
			$(".color").each(function(i,e){
				let val = $(e).val();
				if(val != ""){
					if(data_list.has(val)){ // checking is already selected
						alert("Already exist");
						$(e).val(""); // resetting the drop down
					}else{
						data_list.add(val)
					}
				} 
				
			});
		}
		 onchange="selectcolor(this);" 
	</script>
	<div id="append">
		<select name="color[]" onchange="selectcolor(this);" id="colorsData1" class="form-control color">
			<option value="" >--Select any One--</option>
			<option value="1" >Red</option>
			<option value="2" >Yellow</option>
			<option value="3">Blue</option>
			<option value="4">Black</option>
		</select>

		<select name="color[]" id="colorsData2" class="form-control color"  onchange="selectcolor(this);" >

				<option  value="" >--Select any One--</option>
			<option value="1" >Red</option>
			<option value="2" >Yellow</option>
			<option value="3">Blue</option>
			<option value="4">Black</option>
		</select>
		<select name="color[]" id="colorsData3" class="form-control color"  onchange="selectcolor(this);" >
			 
			<option  value=""  >--Select any One--</option>
			<option value="1" >Red</option>
			<option value="2" >Yellow</option>
			<option value="3">Blue</option>
			<option value="4">Black</option>
		</select>
	</div>
</body>
</html>
0 голосов
/ 14 февраля 2020

вам это поможет

var selected_color = [];
$(".selectebox").on('change',function(){
  if(selected_color.includes($(this).val())){
   alert("This color already selected");
   $(this).val("");
  }
selected_color.push($(this).val());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="append">
<select name="color[]" id="colorsData1"  class="form-control selectebox">
   <option value = "">--Select any One--</option>
   <option value = "Red">Red</option>
   <option value = "Yellow">Yellow</option>
   <option value = "Blue">Blue</option>
   <option value = "Black"> Black</option>
</select>

<select name="color[]" id="colorsData2" class="form-control selectebox">
   <option value = "" >--Select any One--</option>
   <option value = "Red">Red</option>
   <option value = "Yellow">Yellow</option>
   <option value = "Blue">Blue</option>
   <option value = "Black"> Black</option>
</select>
<select name="color[]" id="colorsData3" class="form-control selectebox">
   <option value = "">--Select any One--</option>
   <option value = "Red">Red</option>
   <option value = "Yellow">Yellow</option>
   <option value = "Blue">Blue</option>
   <option value = "Black"> Black</option>
</select>
</div>
...