Это не так. Это невозможно.
Итак, есть несколько возможных причин, по которым это может выглядеть так:
Код, который на самом деле выполняется, выглядит не так. Это может быть более старая версия с кэшированием или вы ищете не тот файл.
Код выполняется более одного раза, таким образом могут выполняться обе ветви выполнения. (Хотя я не вижу возможности для этого здесь.)
Вы неправильно интерпретируете результат, и все, что вы видите, приводит к выводу, что обе ветви должны быть выполнены, на самом деле вызвано каким-то другим кодом.
Вы можете использовать отладчик для установки точек останова в коде. Установите одну точку останова перед условием и одну в каждой ветви. Затем вы увидите, выполняется ли код дважды, один раз или нет.
Edit:
Оповещения, которые вы добавили в код, показывают, что событие фактически вызывается дважды, и в первый раз значения не соответствуют вашим ожиданиям.
Добавьте код, чтобы попытаться выяснить, откуда вызывается событие. Поймать объект события, добавив его в сигнатуру функции: .blur(function(e) {
. Затем вы можете использовать e.currentTarget, чтобы получить элемент, вызвавший событие, и отобразить некоторые атрибуты из него (например, его идентификатор), чтобы идентифицировать его.
Редактировать 2:
Меня интересует эта строка:
$(product_calendar).attr({ value: newRemove_val });
Вы создаете переменную product_calendar
где-нибудь или имеете в виду:
$('input[name=product_calendar}').attr({ value: newRemove_val });
Редактировать 3:
Видя полный код, причина двойного выполнения понятна. Вы добавляете четные обработчики внутри обработчика событий, что означает, что каждый раз добавляется другой обработчик.
Причина, по которой attr_val
не работает должным образом, заключается в том, что он создается как локальная переменная в одной функции, а затем не обрабатывается в другой функции.
Вместо этого добавьте обработчики размытия с самого начала, и они появятся только один раз. Объявите переменную вне функции.
Некоторые заметки:
- Вы можете использовать функцию
val
вместо доступа к атрибуту value
с помощью функции attr
.
- Когда вы присваиваете
$(this)
product_calendar
, это объект jQuery. Вам не нужно использовать $(product_calendar)
.
- Удаление не соответствует полным значениям, поэтому вы можете добавить
12
и 2
, затем удалить 2
и вы получите 1
и 2
left.
(это фиктивный текст, потому что вы не можете иметь блок кода после списка ...)
// Complete behavioral script
$(function() {
// declare variables in outer scope
var attr_val;
var product_calendar;
$('input[name=product_calendar]')
.css({ 'color': '#5fd27d', 'cursor': 'pointer' })
.attr('readonly', 'readonly') // Additional formatting for specified fields
.focus(function() { // Focus on any 'input[name=product_calendar]' executes function
product_calendar = $(this); // Explicit declaration
attr_val = product_calendar.val();
$('#calendar_addRemove input').val(''); // Clear input fields
$('#calendar_addRemove').fadeIn(500); // Display input fields
});
$('input[name=calendar_add]').blur(function() { // After value entered, action occurs on blur
var add_val = $(this).val();
if (add_val != '') {
product_calendar.val(attr_val + ' ' + add_val);
}
$('#calendar_addRemove').fadeOut(500);
});
$('input[name=calendar_remove]').blur(function() { // After value entered, action occurs on blur
var remove_val = $(this).val();
if (remove_val != '') {
if (attr_val.indexOf(remove_val) != -1) {
product_calendar.val(attr_val.replace(remove_val, ''));
$('#calendar_addRemove').fadeOut(500);
} else {
$('#calendar_remove').append('<p class="error">Occurrence Not Found</p>');
$('.error').fadeOut(1500, function() { $(this).remove(); });
}
} else {
$('#calendar_addRemove').fadeOut(500);
}
});
});