2011-12-20 2 views
0

Я использую .NET 4 и JQuery для отображения/скрытия Div в зависимости от того, что выбрано из DDL. Когда я вручную нажимаю раскрывающийся список, Jquery срабатывает, как ожидалось, и показывает поля show/hide. Но когда я программно изменяю selectedValue DDL, Jquery просто не срабатывает. У меня есть один ddl с двумя вариантами, один и повторяющийся, и я показываю выбранный div, а другой - скрытый.JQuery ddl Изменить событие Не стрелять

$(document).ready(function() { 
    $("#MainContent_ddlScheduleType").change(function() { 
     $('#Single').hide(); 
     $('#Recurring').hide(); 
     var newSelection = "#" + this.value; 
     $(newSelection).fadeIn('slow'); 
    }); 
}); 

Внутри фактической страницы есть два раскрывающийся полей, первый из которых список всех рабочих мест в настоящее время в таблице базы данных. Эти задания выполняются один или несколько раз (один, повторяющийся). Пользователь выбирает имя задания из первого раскрывающегося списка. Хранимая процедура извлекает информацию для этого задания из базы данных и сохраняет ее внутри переменных на стороне клиента. Затем я сравниваю эту переменную на стороне клиента, чтобы решить, следует ли мне изменять раскрывающиеся списки. Вот обработчик событий, который выполняет большую часть работы. Итак, опять же, когда вы выбираете задание из первого выпадающего списка, предполагается, что второе падение будет отображаться, если оно будет повторяться или однократно (это происходит успешно!), Но JQuery фактически не показывает соответствующий Single/Recurring Div что он должен показать.

 protected void ddlJobList_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string Frequency = null; 
     SqlParameter sqlParameter = new SqlParameter("@JobName", ddlJobList.SelectedItem.Text); 
     DataTable dt = SqlHelper.GetDataTable("zzGetJobInformation", CommandType.StoredProcedure, sqlParameter); 

     if (!(dt.Rows[0]["Frequency"] is DBNull)) 
      Frequency = dt.Rows[0]["Frequency"].ToString(); 

     if (Frequency == null) 
      ddlScheduleType.SelectedValue = "Single"; 
     else 
      ddlScheduleType.SelectedValue = "Recurring"; 
    } 

Любая причина, по которой это не может привести к пожару JQuery?

Я смотрел здесь: jQuery drop down list change event not fire

Хотя я не использую MVC, у меня есть до того, чтобы я мог связать код, который очень похож на меня. К сожалению, ссылка на «решение» больше не активна, и их ответы были не очень описательными. Я могу точно сказать, что в firebug не сообщается об ошибках консоли/javascript.

+1

Я сомневаюсь, что сеть играет роль в этом вообще. серверная технология не влияет на сценарии на стороне клиента. –

+0

@Jason Meckley Это правда, но я решаю значение для ddlScheduleType.SelectedValue, вытаскивая из БД, тогда, если это определенное значение, я установил DDL в Single с помощью C# и asp ddl. – Kulingar

ответ

1

ОК, это объясняет это немного лучше. путаница заключается в смешении сервера и клиентского кода. Я бы рекомендовал использовать тот или иной, чтобы управлять раскрывающимися списками и влияет, а не обоими.

Используя оба способа, вам нужно иметь дело с обратными передачами, событиями веб-форм и поддерживать состояние как на клиенте (jquery), так и на сервере (.net), который является беспорядочным.

Я бы либо использовал веб-формы для управления состоянием пользовательского интерфейса, либо использовал jquery и ajax-запросы со способами страницы, asmx или другим типом обработчика asp.net для управления состоянием пользовательского интерфейса.

+0

Заявления, подобные этому, заставляют меня думать, что я задаю свой вопрос неправильно или мне не хватает некоторых основ в программировании ... Строка ddlScheduleType.SelectedValue = "Single"; это .net 4, который встречается в обработчике событий функции C# для того, когда сбрасывается список.Его нельзя вызвать внутри функции JavaScript. – Kulingar

+0

вот в чем проблема. сервер и клиентский код напрямую не зависят друг от друга. есть целый запрос/ответ между ними. изменения происходят либо на клиенте, либо на сервере, а не на обоих. ну, они могут, но вам нужно подключить вызовы ajax и обработать запрос и ответ на клиенте и сервере. , но в этом случае изменение выбранного значения на сервере не влияет на обработчик изменения jquery. –

+0

Думаю, я снова плохо работаю, объясняя, что происходит. Население на стороне сервера выполняется один раз во время выполнения, а затем каждый раз, когда изменяется верхняя папка. Позвольте мне изменить свой главный пост. Одна минута. – Kulingar

1

Это состояние гонки? В какой момент вы программно устанавливаете выбранное значение? $ (document) .ready ждет пока довольно поздно (по сравнению с жизненным циклом) выполнить, чтобы он знал, что все вещи, которые вы пытаетесь получить внутри $ (document) .ready, были визуализированы ...

Если вы произвольно устанавливаете это выбранное значение в документе document.ready, вы можете вызвать его до создания события.

+0

Нет, не должно быть состояния гонки. Только одно имеет доступ также к ddl.ScheduleType.Selected value за раз. Кроме того, Yes Document.ready() запускает последний, но $ ("# MainContent_ddlScheduleType"). Change (function()) должен срабатывать при каждом изменении списка выпадающего списка, правильно? – Kulingar

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