Функция размытия события jQuery - как высушить это?

0

Я использую jQuery для формы управления сотрудниками. Этот код работает, но он повторяется. Есть лучший способ сделать это? У меня нет большого опыта работы с jQuery, поэтому я ценю любые указатели, которые у вас есть. Селекторы ссылаются на входы в HTML.

$('#fname').blur(function(){    
var key = "name_first";
var value = $(this).val();
if ( value != _fname ){
    changeemp(key, value);
    _fname = value;
}
});
$('#lname').blur(function(){        
var key = "name_last";
var value = $(this).val();
if ( value != _lname ){
    changeemp(key, value);
    _lname = value;
}           
});
$('#initials').blur(function(){     
var key = "initials";
var value = $(this).val();
if ( value != _initials ){
    changeemp(key, value);
    _initials = value;
}               
});             
$('#email').blur(function(){        
var key = "email";
var value = $(this).val();
if ( value != _email ){
    changeemp(key, value);
    _email = value;
}               
});

HTML:

<label for="fname"><span>First Name</span></label><br/>
<input type="text" id="fname" class="inputdata"><br/><br/>

<label for="lname">Last Name</label><br/>
<input type="text" id="lname" class="inputdata"><br/><br/>

<label for="initials">Displayed Initials</label><br/>
<input type="text" id="initials" class="inputdata"><br/><br/>

<label for="email">Email Address</label><br/>
<input type="email" id="email" class="inputdata"><br/><br/>
  • 0
    Можете ли вы также опубликовать сопроводительный HTML? Кроме того, откуда _lname переменные _fname , _lname т. Д.?
  • 0
    _fname, _lname и т. д. являются глобальными переменными.
Показать ещё 2 комментария
Теги:
events
dry
blur

2 ответа

1
Лучший ответ

Подход был бы следующим:

var blurInfos = [
{ id: '#fname', key: 'name_first', varName: '_fname'},
{ id: '#lname', key: 'name_last', varName: '_lname'},
{ id: '#initials', key: 'initials', varName: '_initials'}
];

var varContext = window;

var handleBlur = function (blurInfo) {
    $(blurInfo.id).blur(function(){    
        var key = blurInfo.key;
        var value = $(this).val();
        if ( value != varContext[blurInfo.varName] ){
            changeemp(key, value);
            varContext[blurInfo.varName] = value;
        }
    });
};

for (var i = 0; i < blurInfos.length; i++) {
    var blurInfo = blurInfos[i];
    handleBlur(blurInfo);
};

Заметки

  • В коде предполагается, что переменные _fname, _lname и т.д. Находятся в глобальном контексте (window). В противном случае код должен быть соответствующим образом изменен.

редактировать

Обновленный ответ, поскольку считается, что это неправильная практика, определяющая function for циклов

0

Установите ключ как атрибут в элементах html или используйте идентификатор для соответствия значениям объекта в формате {{sId}: {sValue}, {sId}: {sValue}}. это превратилось бы в нечто подобное:

$('.inputdata').change(function()
{
   // this method should handle comparing and setting
   TryChangeEmp(this.id, this.value);
});

TryChangeEmp = function(sId, sVal)
{
   // where defaultValues is your default values in keyValue pair { sId : sValue }
   if (defaultValues[sId] != sVal) 
   {
      defaultValues[sId] = sVal; 
      /* whatever other processing */
   }
}

Я также изменил использование события изменения, так как это, по-видимому, лучше соответствует вашим критериям

Ещё вопросы

Сообщество Overcoder
Наверх
Меню