Skip to content

Commit f6943c1

Browse files
committed
1 parent 0945fcc commit f6943c1

File tree

1 file changed

+30
-11
lines changed

1 file changed

+30
-11
lines changed

src/jquery.tagsinput-revisited.js

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
value = jQuery.trim(value);
2727

28-
if ((options.unique && $(this).tagExist(value)) || !_validateTag(value, options, tagslist)) {
28+
if ((options.unique && $(this).tagExist(value)) || !_validateTag(value, options, tagslist, delimiter[id])) {
2929
$('#' + id + '_tag').addClass('error');
3030
return false;
3131
}
@@ -172,6 +172,7 @@
172172
if (!settings.interactive) return this;
173173

174174
$(data.fake_input).val('');
175+
$(data.fake_input).data('pasted', false);
175176

176177
$(data.holder).on('click', data, function(event) {
177178
$(event.data.fake_input).focus();
@@ -180,6 +181,9 @@
180181

181182
$(data.fake_input).on('focus', data, function(event) {
182183
$(data.holder).addClass('focus');
184+
if ($(this).val() === '') {
185+
$(this).removeClass('error');
186+
}
183187
});
184188

185189
$(data.fake_input).on('blur', data, function(event) {
@@ -237,8 +241,6 @@
237241
});
238242
}
239243

240-
// TODO: keypress and input cannot interfere with each other (look at validation perspective also)
241-
242244
// If a user types a delimiter create a new tag
243245
$(data.fake_input).on('keypress', data, function(event) {
244246
if (_checkDelimiter(event)) {
@@ -257,8 +259,16 @@
257259
}
258260
});
259261

262+
$(data.fake_input).on('paste', function () {
263+
$(this).data('pasted', true);
264+
});
265+
260266
// If a user pastes the text check if it shouldn't be splitted into tags
261-
$(data.fake_input).bind('input', data, function(event) {
267+
$(data.fake_input).on('input', data, function(event) {
268+
if (!$(this).data('pasted')) return;
269+
270+
$(this).data('pasted', false);
271+
262272
var value = $(event.data.fake_input).val();
263273

264274
value = value.replace(/\n/g, '');
@@ -292,15 +302,15 @@
292302
$(this).trigger('focus');
293303
}
294304
});
295-
296-
$(data.fake_input).blur();
297305

298306
// Removes the error class when user changes the value of the fake input
299-
if (data.unique) {
300-
$(data.fake_input).keydown(function(event) {
307+
$(data.fake_input).keydown(function(event) {
308+
console.log('?');
309+
// alt, shift, esc, ctrl and arrows keys are not taken into consideration
310+
// if (!$.inArray(event.keyCode, [37, 38, 39, 40, 27, 16, 17, 225])) {
301311
$(this).removeClass('error');
302-
});
303-
}
312+
// }
313+
});
304314
});
305315

306316
return this;
@@ -344,7 +354,7 @@
344354
}
345355
};
346356

347-
var _validateTag = function(value, options, tagslist) {
357+
var _validateTag = function(value, options, tagslist, delimiter) {
348358
var result = true;
349359

350360
if (value === '') result = false;
@@ -353,6 +363,15 @@
353363
if (options.limit !== null && tagslist.length >= options.limit) result = false;
354364
if (options.validationPattern !== null && !options.validationPattern.test(value)) result = false;
355365

366+
if (typeof delimiter === 'string') {
367+
if (value.indexOf(delimiter) > -1) result = false;
368+
} else {
369+
$.each(delimiter, function(index, _delimiter) {
370+
if (value.indexOf(_delimiter) > -1) result = false;
371+
return false;
372+
});
373+
}
374+
356375
return result;
357376
};
358377

0 commit comments

Comments
 (0)