2016-06-07 2 views
0

Я работаю над скриптом, который добавляет кнопку, которая плавает поверх миниатюры фотографий профиля пользователя Facebook.Нажав на кнопку, добавленную JavaScript, щелкните ее также

Вот скриншот:

Facebook thumbail button

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

Скриншот:

prompt screenshot

Что меня, хотя беспокоит, после нажатия на кнопку и нажав кнопку Отмена или Окей в командной строке, нажмите на самом деле проходит через кнопку и нажимает на изображение профиля сам эскиз. Один клик нажимает на оба элемента!

Есть ли способ сделать это так, чтобы область под самой кнопкой не была нажата? Но остальное изображение профиля?

Я пробовал поиск по этой теме, но не смог найти много результатов. Даже если я попытаюсь найти что-то вроде «Добавить прописку ниже/под кнопкой JavaScript», я получаю заполнение вокруг кнопки, а не прямо под ней в точке оси z.

Вот код сценария, вы можете скопировать его прямо в консоль. То есть, если у вас есть учетная запись Facebook и вы вошли в систему. Также это работает только на профилях, кроме ваших (иначе data-profileid будет отсутствовать).

// Create the button 
var btn = document.createElement("BUTTON"); 
var t = document.createTextNode("FBID"); // To replace with icon 
btn.appendChild(t); 

// Add a listener 
btn.addEventListener("click", getFBID); 

// Styling (positioning) 
btn.style.display="block"; 
btn.style.position="absolute"; 
btn.style.top="4px"; 
btn.style.right="4px"; 

// Function to get Facebook ID 
function getFBID() { 
    prompt("Copy it:", document.querySelectorAll("[data-profileid]")[0].getAttribute("data-profileid")); 
} 

// Append button to profile picture 
document.getElementsByClassName("profilePicThumb")[0].appendChild(btn); 

Ах да, я чувствую, что причина, почему это происходит потому, что я добавление к ссылке на якорь. На всякий случай эта информация была бы полезна.

Любая помощь приветствуется, спасибо!

+0

положить Z-индекс на кнопку, которая выше, чем профиль ПИК – JordanHendrix

+0

имели взгляд на '' preventDefault' и stopPropagation' методов яваскрипта обработчиков событий? –

+0

@JordanHendrix, попробовал это раньше, хотя я чувствую, что больше для позиционирования, ничего не сделал, к сожалению. –

ответ

1

Попытка предотвратить действия по умолчанию для мыши, как это:

btn.addEventListener("click", function(event){ 
    event.preventDefault(); 
    event.stopPropagation(); 
    getFBID(); 
    return false; 
}); 

EDIT: используйте event.stopPropagation();

(сравните эту тему How to stop event bubbling on checkbox click)

+0

К сожалению, это не сработало:/ –

+0

Это сработало! Я пробовал оба preventDefault и stopPropagation, но никогда не пытался их обоих вместе, и это все! Спасибо :) –

+0

@ user3637541: Ну в соответствии со стандартами ** возвращение false в конечном итоге прекратит распространение и предотвратит дефолт ** Думаю, так ** в чем смысл ** писать его снова? (хотя не уверен, что все браузеры соответствуют этим стандартам) –

1

Попробуйте

// Create the button 
var btn = document.createElement("BUTTON"); 
var t = document.createTextNode("FBID"); // To replace with icon 
btn.appendChild(t); 

// Add a listener 
btn.addEventListener("click", getFBID); 

// Styling (positioning) 
btn.style.display="block"; 
btn.style.position="absolute"; 
btn.style.top="4px"; 
btn.style.right="4px"; 

// Function to get Facebook ID 
function getFBID() { 
    prompt("Copy it:", document.querySelectorAll("[data-profileid]")[0].getAttribute("data-profileid")); 
    return false;     // Try returning false here.. 
} 

// Append button to profile picture 
document.getElementsByClassName("profilePicThumb")[0].appendChild(btn); 

getFBID в этом случае обратного вызова для события, которое возникает на нажатие кнопки. return false будет следить за тем, чтобы событие не было передано его родительскому объекту и, следовательно, не вызвало бы событие родителя или не вызвало бы обработчик событий.

+0

Нет, не работает! Однако стоит попробовать. –

+0

Правильно (так проголосовали), но объяснение было бы неплохо :) – Archer

+0

@Archer, к сожалению, он не исправил его для меня. –

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