Как запустить функцию, когда поле заполнено?
Нужно указать у инпута атрибут maxlength="18" и вместо keyup нужно использовать событие input: https://jsfiddle.net/58n0e6w4/1/
$("#elem").keyup(function() {
   var $input=$("input");
      var counter = $input.val();
      if (counter.length >= 18) { // или counter.length === 18, без разницы
           $input.val(counter .slice(0, 18))
}
Не дасто вводить более 18 символов