Я использую 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/>
Подход был бы следующим:
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
циклов
Установите ключ как атрибут в элементах 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 */
}
}
Я также изменил использование события изменения, так как это, по-видимому, лучше соответствует вашим критериям
_lname
переменные_fname
,_lname
т. Д.?