Запретить вызов функции изнутри [duplicate]

Короткий ответ: вам нужно выполнить обратный вызов следующим образом:

function callback(response) {
    // Here you can do what ever you want with the response object.
    console.log(response);
}

$.ajax({
    url: "...",
    success: callback
});
9
задан Alex Jolig 4 January 2015 в 07:46
поделиться

6 ответов

Нет прямого способа предотвратить повышение событий для свойства text, однако ваш обработчик событий может использовать флаг для определения погоды или не выполнять задачу. Это я, вероятно, более эффективен, чем прикрепление и отключение обработчика событий. Это может быть сделано с помощью переменной внутри страницы или даже специализированного обертки класса

С переменной:

skipTextChange = true;
txt.Text = "Something";

protected void TextChangedHandler(object sender, EventArgs e) {
  if(skipTextChange){ return; }
  /// do some stuffl
}

С помощью специализированной обертки обработчика события

   var eventProxy = new ConditionalEventHandler<EventArgs>(TextBox1_TextChanged);
    TextBox1.TextChanged = eventProxy.EventAction;

    eventProxy.RaiseEvents = false;
    TextBox1.Text = "test";


    public void TextBox1_TextChanged(object sender, EventArgs e) {
       // some cool stuff;
    }

    internal class ConditionalEventHadler<TEventArgs> where TEventArgs : EventArgs
{
   private Action<object,TEventArgs> handler;

    public bool RaiseEvents {get; set;}

    public ConditionalEventHadler(Action<object, TEventArgs> handler)
    {
        this.handler = handler; 
    }

    public void EventHanlder(object sender, TEventArgs e) {
      if(!RaiseEvents) { return;}
      this.handler(sender, e);
    }
}
12
ответ дан AgustinCoder 23 August 2018 в 21:30
поделиться
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        EventHandler TextChanged_EventHandler = new EventHandler(textBox1_TextChanged);
        textBox1.TextChanged -= TextChanged_EventHandler;
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        MessageBox.Show("BUG");
    }
}
0
ответ дан AsfK 23 August 2018 в 21:30
поделиться
txt.TextChanged -= textBox1_TextChanged;  // dettach the event handler
txt.Text = "something"; // update value
txt.TextChanged += textBox1_TextChanged; // reattach the event handler
4
ответ дан Balanikas 23 August 2018 в 21:30
поделиться

Быстрый и грязный способ - сделать

ctrl.Enable = false; 
ctrl.Text = "Something";
ctrl.Enable = true;

, а затем в событии OnChange инкапсулировать код нарушения с помощью

if (ctrl.Enabled) {
  // offending code here.
}
1
ответ дан Dan Mecklenburg 23 August 2018 в 21:30
поделиться

Вы можете расширить текстовое поле и ввести там новое свойство, которое не будет инициировать событие TextChanged.

    class SilentTextBox : TextBox
    {
        // if true, than the TextChanged event should not be thrown
        private bool Silent { get; set; }

        public string SilentText
        {
            set
            {
                Silent = true;
                Text = value;
                Silent = false;
            }
        }

        protected override void OnTextChanged(EventArgs e)
        {
            // raise event only if the control is in non-silent state
            if (!Silent)
            {
                base.OnTextChanged(e);
            }
        }
    }
5
ответ дан Kuba 23 August 2018 в 21:30
поделиться

попробуйте этот метод расширения

  public static class TextBoxExt
{
    private static readonly FieldInfo _field;
    private static readonly PropertyInfo _prop;

    static TextBoxExt()
    {
        Type type = typeof(Control);
        _field = type.GetField("text", BindingFlags.Instance | BindingFlags.NonPublic);
        _prop = type.GetProperty("WindowText", BindingFlags.Instance | BindingFlags.NonPublic);
    }

    public static void SetText(this TextBox box, string text)
    {
        _field.SetValue(box, text);
        _prop.SetValue(box, text, null);
    }
}

вы можете использовать textbox.SetText ("...") для изменения текста, и событие TextChanged не будет запущено.

3
ответ дан Mitz 23 August 2018 в 21:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: