2010-04-13 2 views
2

При настройке подключений dojo к onmouseover и onmouseout, а затем добавление содержимого на mouseover, dojo запускает событие onmouseout сразу, так как есть новый контент. Пример:dojo connect mouseover и mouseout

dojo.query(".star").parent().connect("onmouseover", function() { 
    dojo.query("span", this).addContent("<img src='star-hover.jpg'>"); 
}).connect("onmouseout", function() { 
    dojo.destroy(dojo.query("img", this)[0]); 
}); 

The parent() является <td>, а .star является продолжительность. Я хочу добавить изображение наведения, когда пользователь наводил на ячейку таблицы. Он работает до тех пор, пока курсор не наведет изображение, потому что это приведет к серьезному морганию. Это преднамеренно? И есть ли способ обойти это?

Edit: (., По крайней мере, как я ожидал, что он работает) Просто попробовал что-то подобное с JQuery, и он работает, как ожидалось

$(".star").parent().hover(function() { 
    $("span", this).append("<img src='star-hover.jpg'>"); 
}, function() { 
    $("img", this).remove(); 
}); 

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

+0

Я бы предпочел получить изображение внутри всех узлов span.star с начала, а затем добавить класс «.hovered» в узлы , когда мышь закончилась, и добавить правило css для отображения изображений внутри span.star под «td.hovered». – Kniganapolke

+0

Конечно, но бывали случаи, когда нужно было добавлять элементы в состояние зависания. И, конечно, это не может быть правильное поведение? – peirix

ответ

5

Причина, по которой он работает с jQuery в вашем примере, заключается в том, что .hover использует нормализованные события onmouseenter/onmouseleave. Если бы вы могли подключиться к ним, это работало бы в Dojo, как ожидалось. Кроме того, моделирование .hover для Dojo будет:

dojo.NodeList.prototype.hover = function(over, out){ 
    return this.onmouseenter(over).onmouseleave(out || over); 
} 

Тогда вы бы просто:

dojo.query("...").hover(function(e){ .. }, function(e){ .. }); 

Различия между mouseeneter и при наведении курсора мыши являются, почему вы видите поведение немедленно onmouseout стрельбы ,

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