Проверьте, есть ли у любого другого выбора такое же значение - PullRequest
0 голосов
/ 05 марта 2020

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

Когда пользователь нажимает кнопку «Период Tilføj», он должен проверить, существует ли выбор. Если он не существует, он может продолжить вызов функции. Также при нажатии этой кнопки она устанавливает 2 переменные.

var period_interval     = jQuery('.vehicle--single-variations-add-interval option:selected').val();
var period_recurrence   = jQuery('.vehicle--single-variations-add-recurrence option:selected').val();

Я использую их, чтобы увидеть, существует ли он

(Почему моя страница черная? Аддон для браузера - для моих глаз)

enter image description here

Таким образом, проблема заключается в том, что 2 выбора внизу (Добавить новую строку) имеют 2 значения, заданные пользователем. Пользователь НЕ сможет создать новый вариант (строку), если интервал и день / месяц / год и т. Д. c. уже существует.

Итак, скажем, id хотел бы создать новый. Смотрите скриншот в качестве примера. Я хотел бы вариации на каждый 5-й день. Когда я нажимаю «Период Tilføj», он должен просмотреть все строки и проверить для каждого выбора, существует ли значение из интервала в этой строке, и день / месяц / год ТАКЖЕ существует в той же строке. Как бы я это сделал?

Вот что я пробовал до сих пор:

var period_interval     = jQuery('.vehicle--single-variations-add-interval option:selected').val();
var period_recurrence   = jQuery('.vehicle--single-variations-add-recurrence option:selected').val();
var bExists             = false;
if(jQuery('.vehicle--single-variations-recurrence option[value="'+period_recurrence+'"]:selected') && jQuery('.vehicle--single-variations-interval option[value="'+period_interval+'"]:selected'))
{
    console.dir('exists');
}
else
{
    console.dir('noexist');
}
// Check if current variations are conflicting with the one we are trying to create
jQuery('.vehicle--single-variations-interval option:selected').each(function() {
    if(period_interval == jQuery(this).val())
    {
        console.dir('interval exists');
        // It is conflicting - do not create
        bExists = true;
    }

    jQuery('.vehicle--single-variations-recurrence option:selected').each(function() {
        if(period_recurrence == jQuery(this).val())
        {
            console.dir('period exists');
            // It is conflicting - do not create
            bExists = true;
        }
    });
});

^ Этот работал почти

Вот весь мой код:

jQuery('.vehicle--single-variations-add').on('click', function()
{
    // Reset data
    var price               = 0;
    var period_interval     = jQuery('.vehicle--single-variations-add-interval option:selected').val();
    var period_recurrence   = jQuery('.vehicle--single-variations-add-recurrence option:selected').val();
    var bExists             = false;
    if(jQuery('.vehicle--single-variations-recurrence option[value="'+period_recurrence+'"]:selected') && jQuery('.vehicle--single-variations-interval option[value="'+period_interval+'"]:selected'))
    {
        console.dir('exists');
    }
    else
    {
        console.dir('noexist');
    }

    // // Check if current variations are conflicting with the one we are trying to create
    // jQuery('.vehicle--single-variations-interval option:selected').each(function() {
    //  if(period_interval == jQuery(this).val())
    //  {
    //      console.dir('interval exists');
    //      // It is conflicting - do not create
    //      bExists = true;
    //  }

    // });

    // jQuery('.vehicle--single-variations-recurrence option:selected').each(function() {
    //  if(period_recurrence == jQuery(this).val())
    //  {
    //      console.dir('period exists');
    //      // It is conflicting - do not create
    //      bExists = true;
    //  }
    // });


    // jQuery('.vehicle--single-variations-recurrence option[value="'.period_interval.'"]:selected')


    return exists;

Я думаю, это должно быть довольно просто, но я просто вижу решение: /

Изменить - Забыл добавить, выберите html

<tr>
    <td style="font-variant-numeric: tabular-nums;"><?php echo '#'.$oID; ?></td>
    <td class="cell-price">
        <input type="number" value="<?php echo get_post_meta($oID)['_regular_price'][0]; ?>" class="input-small" placeholder="<?php _e('Amount', 'layback'); ?>">
    </td>
    <td class="cell-period">
        <div class="group">
            <select name="" id="" class="input-small vehicle--single-variations-interval">
                <option value="1" <?php if(get_post_meta($oID)['_subscription_period_interval'][0] == 1) echo 'selected'; ?>>Every</option>
                <option value="2" <?php if(get_post_meta($oID)['_subscription_period_interval'][0] == 2) echo 'selected'; ?>>Every 2nd</option>
                <option value="3" <?php if(get_post_meta($oID)['_subscription_period_interval'][0] == 3) echo 'selected'; ?>>Every 3rd</option>
                <option value="4" <?php if(get_post_meta($oID)['_subscription_period_interval'][0] == 4) echo 'selected'; ?>>Every 4th</option>
                <option value="5" <?php if(get_post_meta($oID)['_subscription_period_interval'][0] == 5) echo 'selected'; ?>>Every 5th</option>
                <option value="6" <?php if(get_post_meta($oID)['_subscription_period_interval'][0] == 6) echo 'selected'; ?>>Every 6th</option>
            </select>
            <select name="" id="" class="input-small vehicle--single-variations-recurrence">
                <option value="day" <?php if(get_post_meta($oID)['_subscription_period'][0] == 'day') echo 'selected'; ?>>Day</option>
                <option value="week" <?php if(get_post_meta($oID)['_subscription_period'][0] == 'week') echo 'selected'; ?>>Week</option>
                <option value="month" <?php if(get_post_meta($oID)['_subscription_period'][0] == 'month') echo 'selected'; ?>>Month</option>
                <option value="year" <?php if(get_post_meta($oID)['_subscription_period'][0] == 'year') echo 'selected'; ?>>Year</option>
            </select>
        </div>
    </td>
    <td class="cell-actions">
        <button attr-variationid="<?php echo $oID; ?>" class="btn small btn-danger vehicle--single-variations-remove"><?php _e('Delete', 'layback'); ?></button>
    </td>
</tr>

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Первый из. Спасибо за быстрые ответы. Во-вторых, я нашел решение.

Я решил провести l oop через каждый ряд. Установка переменной для каждого выбора и последующее сравнение этих переменных в соответствии с выбором «Добавить новый».

jQuery('.vehicle-single-variation-tr').each(function() {

    var interval = jQuery(this).find('.vehicle--single-variations-interval option:selected').val();
    var recurrence = jQuery(this).find('.vehicle--single-variations-recurrence option:selected').val();

    if(period_interval == interval && period_recurrence == recurrence)
    {
        bExists = true;
    }

});
0 голосов
/ 05 марта 2020

вы можете сделать что-то вроде ниже.

var data = [
    {
        id: 0,
        text: 'enhancement'
    },
    {
        id: 1,
        text: 'bug'
    },
    {
        id: 2,
        text: 'duplicate'
    },
    {
        id: 3,
        text: 'invalid'
    },
    {
        id: 4,
        text: 'wontfix'
    }
];
var selectedValue=[];
var select="select_";
var counter=1;
$(document).ready(function(){
   $("#AddNew").on('click',function(){
       var dataSource=[];
       var option=''
       for(var i=0;i<data.length;i++){
           var name=data[i].text;
           if($.inArray(name,selectedValue)==-1){
              dataSource.push(data[i]);
              option+='<option value="'+name+'">'+name+'</option>'
           }
       }
      var config={
        data: dataSource
      } 
      var id=select+counter;
      var selectcontrol=$("<select/>",{id:id});
      selectcontrol.html(option)
      selectcontrol.on('change',function(){
          var selvalue=$(this)[0].selectedOptions[0].label;
          if($.inArray(selvalue,selectedValue)==-1){
              selectedValue.push(selvalue);
           }
          $(this).attr("disabled",true)
      })
      $("#selectDiv").append(selectcontrol);
      
      counter++;
   })
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<input type='button' id='AddNew' value='Add New'/>
<div id='selectDiv'></div>
...