2013-02-09 2 views
1

Я использую JQuery для динамического добавления элемента для отображения SVG, используя этот код:Указатель мыши при наведении/JQuery нажмите на событие SVG встроенный в объект элемент не работает

someEl = ('#someElement'); 
cancelButton = $(document.createElement('object')).attr({ 
      'class': 'cancelButton', 
      'id':parent_id+'_xbtn', 
      'data': 'img/cancelBtn.svg', 
      'type': 'image/svg+xml' 
     }); 
someEl.after(cancelButton); 

function cancel() { 
    alert('asd'); 
} 
cancelButton.click(cancel); 

И стиль его парить с вручную используя этот CSS:

.cancelButton:hover { 
    cursor: hand; 
    cursor: pointer; 
} 

Однако я обнаружил, что во-первых, когда я наводил элемент, указатель мыши не изменяется. Однако эффекты наведения, которые изменяют сам элемент (например, изменение bg-color), работают нормально. Во-вторых, обработчик jQuery, который я прикрепляю, не срабатывает.

Это ограничение какого-либо элемента <object> или того, как работает SVG? Любые комментарии или предложения оценены.

+0

добавление курсора: указатель после «курсора: рука» указывает курсор на указатель. Просто удалите 'cursor: pointer', чтобы исправить эту проблему –

+0

, и ваш' $ (этот) 'вызов выходит за рамки любой функции, если только это не является результатом фрагмента кода, это означает, что $ (this) относится к глобальному объекту, Я думаю, что это не так, как вы хотите –

+0

Это результат этого фрагмента кода, извините. Это все внутри функции, и она прикрепляется после соответствующего элемента. 'cursor: pointer' - это имя, используемое современными браузерами для руки, но старый IE использует' hand', поэтому оба они необходимы. Если я удалю один, он не работает в FF, Chrome и т. Д., И если я удалю другой, он не будет работать в IE. – dougalg

ответ

2

В моем опыте SVG, встроенный в качестве элементов <object>, имеет тенденцию проглатывать события указателя (поскольку браузер создает новый документ внутри элемента объекта, аналогичный iframe). Есть ли причина, по которой вы не можете просто использовать тег <img>? Например:

someEl = ('#someElement'); 
cancelButton = $('<img>').attr({ 
    'class': 'cancelButton', 
    'id':parent_id+'_xbtn', 
    'src': 'img/cancelBtn.svg' 
}); 
someEl.after(cancelButton); 

function cancel() { 
    alert('clicked'); 
} 
cancelButton.click(cancel); 

Edit:

Если вам нужно использовать <object> тег (например, потому что файл SVG ссылается на внешние активы), мое решение было бы создать прозрачный оверлей DIV из той же ширины и высоту, абсолютно расположенную над вершиной объекта, и вместо этого связывают события с этим div.

+0

Я попробую это, спасибо! На данный момент я только что сохранил PNG SVG и использовал это. – dougalg

+0

@dougalg Это работало для вас? – lakenen

+0

Привет, мне очень жаль. Это работало, но не в некоторых старых браузерах, поэтому я не занимался этим в своем проекте, и я думал, что уже принял это. – dougalg

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