вкладки UI jQuery отключают навигацию вкладки

Вот пример легкой системы с помощью синхронизации потока и асинхронного вызова.

я знаю, что существуют некоторые оборотные стороны, но мне нравится использовать это вместо таймера при начинании длительного процесса (как schedualed серверные службы). Так как это работает встроенный в потоке таймера, Вы не должны волноваться об этом начинаемый снова перед, первоначальный вызов закончился. Это могло быть расширено вполне немного, чтобы заставить его использовать массив datetimes как триггерные времена или добавить еще некоторые способности к нему. Я уверен некоторые из Вас, парни там знают некоторые лучшие пути.

    public Form1()
    {
        InitializeComponent();

        //some fake data, obviously you would have your own.
        DateTime someStart = DateTime.Now.AddMinutes(1);
        TimeSpan someInterval = TimeSpan.FromMinutes(2);

        //sample call
        StartTimer(someStart,someInterval,doSomething);
    }

    //just a fake function to call
    private bool doSomething()
    {
        DialogResult keepGoing = MessageBox.Show("Hey, I did something! Keep Going?","Something!",MessageBoxButtons.YesNo);
        return (keepGoing == DialogResult.Yes);
    }

    //The following is the actual guts.. and can be transplanted to an actual class.
    private delegate void voidFunc<P1,P2,P3>(P1 p1,P2 p2,P3 p3);
    public void StartTimer(DateTime startTime, TimeSpan interval, Func<bool> action)
    {
        voidFunc<DateTime,TimeSpan,Func<bool>> Timer = TimedThread;
        Timer.BeginInvoke(startTime,interval,action,null,null);
    }

    private void TimedThread(DateTime startTime, TimeSpan interval, Func<bool> action)
    {
        bool keepRunning = true;
        DateTime NextExecute = startTime;
        while(keepRunning)
        {
            if (DateTime.Now > NextExecute)
            {
                keepRunning = action.Invoke();
                NextExecute = NextExecute.Add(interval);
            }
            //could parameterize resolution.
            Thread.Sleep(1000);
        }            
    }
7
задан cliveholloway 11 July 2009 в 06:21
поделиться

2 ответа

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

Проверьте этот рабочий пример и следующий фрагмент кода:

$(document).ready(function(){ 
  var allowTabChange = false; 
  var $myTabs = $("#tabs"); 

  $myTabs.tabs({ 
                    select: function(event, ui) { return allowTabChange; }, 
                    show: function(event, ui) { allowTabChange = false; }, 
               }); 

  $('#nextButton').click(function(){offsetTab(1);}); 
  $('#prevButton').click(function(){offsetTab(-1);}); 

  // Helper functions

  function offsetTab(offset){ 
    var tab_num = $myTabs.tabs('option', 'selected'); 
    var nextTab = tab_num + offset; 

    if ( check_tab(nextTab) ) { 
      allowTabChange = true; 
      $myTabs.tabs('select', nextTab); 
    } 
  }

  function check_tab(tab_num){        
    return tab_num >= 0 && tab_num < $myTabs.tabs('length'); 
  } 
});
2
ответ дан 6 December 2019 в 23:12
поделиться

Have you tried setting the event option to something that isn't likely to be fired (if at all)?

For instance:

$('#tabs').tabs({ event: 'change' });

or

$('#tabs').tabs({ event: '' }); //probably better
9
ответ дан 6 December 2019 в 23:12
поделиться
Другие вопросы по тегам:

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