2015-05-29 4 views
3

Я хотел бы сделать проверку jQuery, если поле выбора было изменено. Если он изменился, установите предупреждающее сообщение (изменилось), если оно возвращено по умолчанию, установите другое сообщение предупреждения (значение по умолчанию).jQuery проверить, изменилось ли поле выбора

$('select').on('change',function() { 
    var isDirty = false; 

    $('select').each(function() { 
     var $e = $(this);  
     if (!$e[0].options[$e[0].selectedIndex].defaultSelected) { 
     isDirty = true; 
     }  
    }); 

    if(isDirty == true) { 
     alert("has changed"); 
    } else { 
     alert("default value");   
    } 
}); 

Пожалуйста, сообщите об этом правильному пути.

ответ

4

Вам не нужно внутренний each цикл. Плюс $(this)[0] могут быть оптимизированы для всего this:

$('select').on('change', function() { 
 
     
 
    var isDirty = !this.options[this.selectedIndex].defaultSelected; 
 

 
    if (isDirty) { 
 
     alert("has changed"); 
 
    } else { 
 
     alert("default value"); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select name="" id=""> 
 
    <option value="1">Label 1</option> 
 
    <option value="2" selected>Label 2</option> 
 
    <option value="3">Label 3</option> 
 
    <option value="4">Label 4</option> 
 
</select>

+0

Благодарим Вас за ясный ответ. Что касается цикла 'each', если я хочу проверить все поля выбора, доступные в форме, это не понадобится? Это вопрос новичков :) –

+0

'$ ('select'). On ('change', ...)' уже обрабатывает все selectboxes (он использует каждый из них внутри). – dfsq

1

Я хотел бы сделать что-то вроде:

HTML:

<select data-default="one" id="the-select"> 
    <option>one</option> 
    <option>two</option> 
</select> 

Javascript:

$('#the-select').change(function() { 
    var changed = $(this).val() != $(this).data('default'); 
    alert(changed ? 'changed' : 'not changed'); 
}); 
Смежные вопросы