Przypisanie onclick dla <h3> (nie link), w Greasemonkey


(look997) #1

Chcę przypisać onclick dla

(nie link) w skrypcie Greasemonkey, ale nie wiem jak.

Proszę o prosty przykład.


(mario@) #2

Podaj jaka to strona, który konkretnie element i co ma wykonać się po kliknięciu. W innym wypadku jest setka sposobów na dobranie się do tego elementu (co do jego położenia) a nikt nie będzie zgadywał.

Samo zdarzenie możesz dodać poprzez setAttribute albo stworzyć zdarzenie onclick dla obiektu (funkcja).


(look997) #3

Strona: YouTube.

Element:

document.getElementById('hatrzy')

A po kliknięciu ma wykonać:

var ropozycji = document.getElementById('watch-next-list-body-collapsed').getElementsByTagName('ul')[0].getElementsByClassName('video-list-item');

var ablicy = ropozycji.length;

ablicy -= 1;

for (nrp=0; nrp<=ablicy; nrp++) {

var wyspod = document.getElementById('watch-next-list-body-collapsed').getElementsByTagName('ul')[0].getElementsByClassName('video-list-item')[nrp].getElementsByTagName('a')[0].getElementsByClassName('stat')[1];

var wyspodwar = wyspod.innerHTML;


var znakiwyspod = wyspodwar.length;

var powys = wyspodwar.substring(14, znakiwyspod);

var znakipowys = powys.length;


efektpowys = kropcosto(powys, ".");


wyspod.innerHTML = efektpowys;


var znakowm = znakipowys - 1;

var znakowm2 = znakipowys - 2;

var str1 = powys.substring(znakowm, znakipowys);

var str2 = powys.substring(znakowm2, znakipowys);

if (znakipowys == 1) {var hwc = " wyświetlenie";} else {

if (str1 == 0 || str1 == 1 || str1 == 5 || str1 == 6 || str1 == 7 || str1 == 8 || str1 == 9 || str2 == 12 || str2 == 13 || str2 == 14){var hwc = " wyświetleń";} 

else {var hwc = " wyświetlenia";}

}

wyspod.innerHTML += hwc;

}

(mario@) #4
var h3 = document.getElementById('hatrzy');

	h3.addEventListener("click", ser, false);


function ser()

{

	alert("mario@");

}

(look997) #5

A teraz jeszcze dodać do tego opóźnienie wykonania funkcji.


(mario@) #6

function ser()

{

	var czas = 2;//czas opoznienia w [s]

	setTimeout(function() 

	{

		// tutaj dajesz skrypt

		alert("mario@ 12");

		//////////////////////

	},czas*1000);

}

(look997) #7

Wyszła kolejna sprawa: chcę aby po jednym (1) kliknięciu wyłączyła się ta funkcja (a właściwie klikalność

, ale tylko dla tej konkretnej funkcji, ponieważ

ma przypisane dodatkowe inne funkcje, zupełnie w osobny sposób i one nie mogą być wyłączone).

Zrobiłem to tak:

var zero = 0;

function ser() {


if (zero == 0){

zero=1;

		// tutaj dajesz skrypt

		alert("mario@ 12");

		//////////////////////

}

Ale wolałbym wyłączyć samo wywoływanie funkcji.


(mario@) #8
function ser()

{

                h3.removeEventListener("click",ser,false);

		var czas = 1;//czas opoznienia w [s]

		setTimeout(function() 

		{

			// tutaj dajesz skrypt

			alert("mario@ 12");

			//////////////////////

		},czas*1000);

}

(look997) #9

Coś jest nie tak bo przycisk działa dwa razy, a ma działać tylko raz. I JAK DODAĆ DO TAKIEJ FUNKCJI WARTOŚCI, TAKIE COŚ:

h3.addEventListener("click",ser(ARG),true);

NIE DZIAŁA.


(mario@) #10

Nie krzycz. Można by napisać tak

var zmienneH3 = function () {ser("mario@");};

var h3 = document.getElementById('hatrzy');

h3.addEventListener("click", zmienneH3, false);


function ser(txt)

{

      h3.removeEventListener("click", zmienneH3, false);

      var czas = 1;//czas opoznienia w [s]

      setTimeout(function()

      {

         // tutaj dajesz skrypt

         alert(txt);

         //////////////////////

      },czas*1000);

}

Mi tam działa tak jak powinno.


(look997) #11

Znalazłem tą stronę:

http://kurs.browsehappy.pl/JavaScript/Zdarzenia

Ale mam kolejny problem:

Przekazana wartość powinna być taka, jakie ID ma kliknięty obiekt.


(mario@) #12

Np.

var zmienneH3 = function () {ser(this);};

    var h3 = document.getElementById('hatrzy');

    h3.addEventListener("click", zmienneH3, false);


    function ser(obiekt)

    {

          h3.removeEventListener("click", zmienneH3, false);

          var czas = 1;//czas opoznienia w [s]

          setTimeout(function()

          {

             // tutaj dajesz skrypt

             alert(obiekt.id);

             //////////////////////

          },czas*1000);

    }

W takim układzie zamiast

h3.removeEventListener("click", zmienneH3, false);

możesz napisać

obiekt.removeEventListener("click", zmienneH3, false);