Остановка select.change от обратной публикации

эта проблема является частью большой страницы, но я упростил код, чтобы предоставить простой пример того, о чем я говорю. В основном у меня есть раскрывающийся список ASP с AutoPostBack="true", и я хочу сделать некоторую клиентскую часть javascript, которая может при необходимости остановить обратную передачу. Однако я не могу заставить его остановить обратную передачу.

<script type="text/javascript">
$(document).ready(function()
{
    $("#ddl").bind('change', function() {
        return false;
    });
});
</script>

<select id="ddl" onchange="form.submit()">
    <option value="">Item 1</option>
    <option value="">Item 2</option>
    <option value="">Item 3</option>
    <option value="">Item 4</option>
    <option value="">Item 5</option>
</select>

person rpf3    schedule 10.08.2010    source источник


Ответы (4)


Это мой обходной путь (работает Firefox, работает IE 7/8):

$(function() {
    var $select = $('#ddl'), tmp = $select.attr('onchange');

    $select.attr('onchange', '');

    $select.change(function() {
        // If you want to postback:
        tmp();
    });
});

Simple удаляет обработчик HTML и помещает его в переменную. Затем вы можете зарегистрировать свою функцию изменения, и если вы хотите вызвать функцию автоматической обратной передачи, вы можете это сделать.

person Bob Fincheimer    schedule 10.08.2010
comment
Другие люди представили что-то подобное, но я согласился с этим. Спасибо! - person rpf3; 11.08.2010

Попробуй это:

$(document).ready(function() {
  $('#ddl').attr('onchange', '').change(function() {
    if (0 !== +$(this).attr('selectedIndex')) {
      this.form.submit();
    }
    return false;
  });
});
person jmar777    schedule 10.08.2010
comment
Да, это перезапишет форму form.submit, встроенную в тег, но мне нужно поймать событие onChange, а затем, если определенные критерии не выполняются, не позволять странице выполнять PostBack. - person rpf3; 10.08.2010
comment
@rpf3: Ааа, извини, я пропустил это. Обновленный фрагмент ближе к тому, что вы ищете? - person jmar777; 10.08.2010
comment
То есть спасибо, но я разместил более подробное объяснение проблемы в ответе Патрика Д.В. - person rpf3; 10.08.2010
comment
Хе... новая попытка. Он заблокирует submit(), если выбор имеет пустое значение, иначе он пройдет. Изменить: снова обновлено, чтобы явно проверить selectedIndex, а не значение. - person jmar777; 10.08.2010

$("#ddl").change(function() {
    // Do some javascript
    return false;
});

Кроме того, это может помочь, если вы снимите атрибут onChange с элемента select

person dockeryZ    schedule 10.08.2010
comment
Ваш пример кода фактически совпадает с кодом в вопросе. - person user113716; 10.08.2010

person    schedule
comment
Выполнение e.preventDefault() на самом деле не сделает ничего большего, чтобы предотвратить отправку формы, чем return false;. - person user113716; 10.08.2010