Как заставить работать два маскированных ввода на одном входе?

Я создаю палитру цветов, но я хочу предоставить пользователю возможность выбрать прозрачный в качестве цвета, я использую маскированный ввод для одновременной фильтрации шестнадцатеричных вводов и букв, все в одном вводе.

Вы можете увидеть на JSFiddle: https://jsfiddle.net/Lindow/60u9wygp/7/

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

Фрагмент довольно длинный, но ничего особенного не происходит, поэтому его действительно просто понять.

$(document).ready(function() {

  $('.colorbox').click(function(element) {
    $(".colorpickertext").val(element.target.value)
    $("#colorpicker").css({
      'background': element.target.value
    });
  });

  $('.colorbox-transparent').click(function(element) {
    $(".colorpickertext").val('None')
    $("#colorpicker").css({
      'background': '#fafafa'
    });
  });

  $(".colorpickertext").keyup(function(element) {
    $("#colorpicker").css({
      'background': element.target.value
    });
  });

  var hexadecimal = [{
    "mask": "\\#hhhhhh"
  }, {
    "mask": "llll"
  }];
  $('.colorpickertext').inputmask({
    mask: hexadecimal,
    greedy: false,
    definitions: {
      'h': {
        validator: "[A-Fa-f0-9]",
        cardinality: 1
      },
      'l': {
        validator: "[a-zA-Z ]",
        cardinality: 1
      },
    }
  });
});
button {padding:20px;}
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.inputmask/3.1.62/jquery.inputmask.bundle.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>

<div id="colorpicker">input below should be "None" on transparent button click</div>
<button class="colorbox" value="None" style="background:#ffffff;">transparent</button>
<button class="colorbox" value="#ffbf00" style="background:#ffbf00;"></button>
<input type="text" class="colorpickertext form-control" placeholder="ex: #4dadc9">

Любое предложение о том, как я могу это исправить?

1 ответ

Решение

Я никогда не использовал замаскированный ввод прежде, но я думаю, что я решил это из документов. Вы уже используете две опции для масок, вам просто нужно добавить третью. Я сделал третий, который принимает "Нет":

var hexadecimal = [{
  "mask": "N"
}, {
  "mask": "\\#hhhhhh"
}, {
  "mask": "llll"
}];
$('.colorpickertext').inputmask({
  mask: hexadecimal,
  greedy: false,
  definitions: {
    'h': {
      validator: "[A-Fa-f0-9]",
      cardinality: 1
    },
    'l': {
      validator: "[a-zA-Z ]",
      cardinality: 1
    },
    'N': {
      validator: "None",
      cardinality: 4
    },
  }
});

Порядок масок имел значение - сначала нужно было найти "Нет", чтобы оно не было отфильтровано до #e,

Другие вопросы по тегам