none
Событие "change" при изменении со стороны сервера. RRS feed

  • Вопрос

  • Всем доброго времени суток.=)

    Имеется элемент input, на событие change повешен обработчик:

    <input id="TextBox2" runat="server" />
    
    <script type="text/javascript">
    $("#TextBox2").bind("change", fnChangeInput);
    
    function fnChangeInput() {
        alert($("#TextBox2").val());
    }
    </script>

    Если мы меняем значение элемента руками, то функция повешенная на change срабатывает. При изменении значения с помощью jquery, принудительно вызываем событие и тоже все отлично:

    $("#TextBox2").val("123").change();

    Возникают проблемы при изменении значения со стороны сервера, например:

    TextBox2.Value = "123";
    Подскажите пожалуйста, каким способом можно перехватить событие в последнем варианте изменения значения?=)

Ответы

  • Спасибо за совет!=)

    Реализовал следующим образом, может кому нибудь еще пригодится: 

    ScriptManager.RegisterStartupScript(this, this.GetType(), "temp", "<script language='javascript'>fnChangeProgressBar();</script>", false);
    • Изменено wUI 4 июля 2014 г. 2:53
    • Помечено в качестве ответа wUI 4 июля 2014 г. 2:53

Все ответы

  • Т.е. вы хотите вызвать событие на клиенте, меняя значение на сервере. Если это так, то это не возможно. Но это не значит, что невозможно совсем. Теоретически да, но вот реализация подобного функционала весьма сомнительна, в плане надобности. А зачем вам вообще такое понадобилось?

    Сделаем содержимое сообщества лучше, вместе!

    Модератор
  • Имеется проект экспертной системы, выбирая необходимые условия поиска, данные по приоритетности отображаются в поле с прогресс-барами.

    Возникла необходимость дополнительно визуализировать данную информацию. К проекту прикручен Highcharts, пример который использую: https://dotnethighcharts.codeplex.com/

    <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
        <asp:Literal ID="ltrChart" runat="server"></asp:Literal>
    </asp:Content>
    protected void Page_Load(object sender, EventArgs e)
    {
        DotNet.Highcharts.Highcharts chart = new DotNet.Highcharts.Highcharts("chart")
            .SetXAxis(new XAxis
                        {
                            Categories = new[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }
                        })
            .SetSeries(new Series
                        {
                            Data = new Data(new object[] { 29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4 })
                        });
    
        ltrChart.Text = chart.ToHtmlString();
    }


    При первой отрисовке страницы график отображается и все ок. Изменяя условия выборки, срабатывают серверные события повешенные на htmlcontrol и пересчитывают результат, перерисовывают поле с прогрессбарами, но вот график не строится. Хотя при просмотре через firebug, видно, что добавлен див для тела графика и код javascript для инициализации графика. Я так понимаю, что при вставке кода через сервер в htmlcontrol,  кусок кода на javascript не вызывается.

    Вот и решил, что стоит вставлять значение в некий элемент input, а затем по его изменению строить график. 


    • Изменено wUI 3 июля 2014 г. 7:23
  • Возможно нашел альтернативное решение, которое меня устраивает, на элементы выборки помимо OnSelectedIndexChanged, которые вызывают методы на сервере, повесил еще onchange с вызовом проверки поля с данными для графика и последующим его обновлением. 

    Но если у Вас найдутся еще предложения, будет интересно услышать.=)

  • . Я так понимаю, что при вставке кода через сервер в htmlcontrol,  кусок кода на javascript не вызывается.

    Если вы на колбэке пытаетесь вставить JS то нужно использовать ClientScriptManager.RegisterClientScriptBlock
  • Спасибо за совет!=)

    Реализовал следующим образом, может кому нибудь еще пригодится: 

    ScriptManager.RegisterStartupScript(this, this.GetType(), "temp", "<script language='javascript'>fnChangeProgressBar();</script>", false);
    • Изменено wUI 4 июля 2014 г. 2:53
    • Помечено в качестве ответа wUI 4 июля 2014 г. 2:53