2013-06-06 3 views
2

Мне нужно определить выбранное значение comboBox, и если выбранное значение выбрано, создайте диалоговое окно подтверждения. Если подтверждение неверно, мне нужно вернуться к значению до того, как произойдут изменения. Я пытаюсь со скрытым полем, которое сохраняет значение перед изменением. это не работает ...Событие изменения Combobox для возврата обратно в значение перед изменением

UPDATE: когда я добавил предупреждение, чтобы узнать, действительно ли значение было задано в скрытом поле, все работает нормально. Если я удалю предупреждение, это изменение никогда не произойдет. Какой-то вопрос времени? Я заменил предупреждение с задержкой, и он ничего не исправить. Любые идеи, что происходит?

jQuery('#cboCityID1').focus(function() { 
    if(jQuery('#cboCityID1').val() != '') { 
     jQuery('#hiddencity1').val(jQuery('#cboCityID1').val()); 
    } 
}); 

jQuery('#cboCityID1').change(function() { 

    alert("as debug 1: " + jQuery('#hiddencity1').val()); 

    if(jQuery('#cboCityID1').val() == '') { 
     var r = confirm("Are you sure"); 
     if(!r) { 
      jQuery('#cboCityID1').val(jQuery('#hiddencity1').val()); 
     } 
    } 
}); 

ответ

1

Нет необходимости в скрытом вводе!

A similar question предложил использовать $.data так:

$('select').change(function() { 
    var selected = $(this).val(); 

    if (selected == 'bar') { 
     if (!confirm('Are you sure?')) { 
      $(this).val($.data(this, 'current')); 
      return false; 
     }  
    } 

    $.data(this, 'current', $(this).val()); 
}); 

Я создал JSFiddle с использованием предложенного подхода (без скрытых входов)

0
(function() { 
    var previous;  
    $("select").focus(function() { 
     previous = this.value; 
    }).change(function() {  
     var r = confirm("Are you sure"); 
    if(!r)   
     $('#cboCityID1').val(jQuery('#hiddencity1').val(previous)); 

    }); 
})(); 
0

Я хотел бы предложить:

$('select').change(function(){ 
    var sure = confirm('Are you sure?'); 
    if (!sure) { 
     $(this).val($(this).find('option[selected]')); 
    } 
}); 

JS Fiddle demo.

Хотя, потому что это использует selectedатрибут (в HTML, а не свойство в DOM), это будет всегда вернуться к умолчанию выбранный option со страницы нагрузки, не ранее выбранный option.

Смежные вопросы