Непредсказуемое поведение при наведении курсора в jQuery - PullRequest
0 голосов
/ 16 сентября 2009

Я использую jQuery draggables / droppables, связанные с событием наведения мыши live (). Я использую live, потому что я использую load () для загрузки страницы, и мне нужны эти элементы, доступные после загрузки. В Firefox и Safari я получаю странное поведение, когда при первоначальной загрузке страницы работают только некоторые области, которые можно удалить. Но, отпустив перетаскиваемый div, а затем повторно выбрав его, они снова волшебным образом работают. Перетаскивание div перетаскивания из странных мест иногда работает. Также при первоначальной загрузке все сбрасываемые области будут работать, но некоторые из них только после того, как изначально «дотронулись». Эти первоначальные активирующие прикосновения часто не прямо над div, но иногда далеко от браузера. В любом случае, вот мой код:

$(document).ready(function() {

  // Load main report object
  function reload_report() {
    $('#report').load('{% url timetracker.views.project_report report_id=report_meta.id %}');
  }

  reload_report();

  // Binding dragging events
  $('.worklog-row').live('mouseover', function () {
      drag_worklogs(this);
      return false;
    });

  // Binding dropping events
  $('.dropTarget').live('mouseover', function () {
      drop_worklogs(this, '{% url timetracker.views.move_worklogs report_id=report_meta.id %}', 'drop-hover', reload_report);
    });

Затем в связанном файле JS:

function drop_worklogs($this, post_url, hover_class, callback) {
  $($this).droppable({
      tolerance: 'pointer',
      hoverClass: hover_class, 
      drop: function(event, ui) {
    // Get ids of dropped worklogs
    var worklogs = [];
    ui.helper.children().each(function() {
        var id = this.id;
        id = id.split('-')[1];
        worklogs.push(id);
        });
    var groupStr = $($this).attr('id');

    var typeStr;

    typeStr = groupStr.split('-')[0];
    groupStr = groupStr.split('-')[1];

    var requestArr = {
      worklogs: worklogs,
      group: groupStr,
      type: typeStr
    };

    var requestData = JSON.stringify(requestArr);
    //alert(requestData);

    // Send to server via POST request
    var success = false;
    $.post(post_url, { move: requestData }, function() {}, "json");
    callback();

      }
      });
}

function drag_worklogs($this) {
  // Drag and drop
  $($this).draggable({
    helper:function() {
      var selected = $('input:checked').parents('tr');
      if (selected.length === 0) {
    selected = $($this);
      }
    var container = $('<div/>').attr('id', 'draggingContainer');
    container.append(selected.clone());
    return container; 
      }
      });

1 Ответ

1 голос
/ 16 сентября 2009

Я выяснил проблему благодаря полезным людям на # jquery-ui.

Проблема в том, что событие связывается только при наведении мыши, объясняя причину непредсказуемого поведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...