JS konstrukcja if(onmouseover=true) ?

0

witam
Chciałem się was zapytać czy jest możliwe wykonanie takiej konstrukcji

function dopasujObrazek()
{
    var obrazek = document.getElementById("obrazek");
    if (obrazek.onmouseover = true) {
        document.getElementById("obrazek").src = "../images/zdj_male.jpg";
    }
    else
    {
        document.getElementById("obrazek").src = "../images/zdj_duze.jpg"
    }
}
window.onload = function ()
{
    dopasujObrazek();
} 
1

Nie. Spróbuj w ten sposób.

function dopasujObrazek()
{
    var obrazek = document.getElementById("obrazek");
   obrazek.onmouseover=function(){

  }
  obrazek.onmouseout=function(){

  }
 
}
window.onload = function ()
{
    dopasujObrazek();
} 

 
1

= to operator przypisania. W warunku musisz użyć == lub lepszym rozwiązaniem będzie ===, żeby uniknąć implicit coercion (niejawnego rzutowania).

Poza tym efekt, który chcesz uzyskać możesz osiągnąć za pomocą CSS i background (ten możesz ładnie dopasować za pomocą np. background-size: cover lub contain)

.div { background: url(...);} .div:hover { background: url(...);}

Jeżeli chcesz, żeby działał zapis za pomocą PPM i zapisz jako to możesz zrobić div wielkości obrazka:

<div><img src="...." /></div>

I odpowiednio divem przykryć img. :)

0

dzięki za szybkie odpowiedzi :)

tak wiem że można to wykonać za pomocą css tylko że ja chciałem się dowiedzieć czy onmouseover przyjmuje wartości true gdy jest nad obiektem kursor i false gdy nie ma.

1

onmouseover to event i nie przyjmuje true/false.

Wrzuć sobie to w konsole i przypisz coś do x'a.

x.onmouseover = function() { console.log(this.onmouseover) };

Dostaniesz to co przypisałeś do tego, chociaż suma sumarum jest to true, ponieważ funkcja jest truthy.

x.onmouseover = function() { console.log(!!(this.onmouseover)) }; // wyprintuje true gdy najedziesz na coś myszką, ale nie wiem po co to komu :D

Jeżeli się nie mylę to jest to właściwość obiektu DOM zaimplementowana przez przeglądarkę i gdy najedziesz na coś myszką to wywoływane jest to co przypiszesz do zmiennej onmouseover danego obiektu(w tym wypadku te funkcje).Czyli najeżdzasz na coś myszką i w tym momencie dzieje się tak jakby:

x.onmouseover(); // TAK

x.onmouseover = true // NIE
0

dzięki za odpowiedzi :)

nie chcę zakładać nowego tematu a mam problem mianowicie nie rozumiem dlaczego wyrażenie regularne nie jest dopasowane do ciągu wprowadzonego w inpucie (zawsze zwraca false). Sory za banalne pewnie dla was pytania ale dopiero zaczynam js

function walidacjaImie()
{
    var bledy = document.getElementById("blad");
    var button = document.getElementById("zamowienie").onsubmit = function()
    {
        if(document.getElementById("imie").value.match("/[a-z]/i"))
        {
            bledy.innerHTML = "";
            return true;
        }
        else
        {
            bledy.innerHTML = "Wprowadz imie";
            return false;
        }
    }
}
window.onload = function()
{
    walidacjaImie();
} 

Już sobie poradziłem, nie wiedziałem że wyrażenia regularne muszą być przypisane do zmiennej, myślałem że można je wpisać jako stringa przy sprawdzaniu.

0
  1. Powinieneś rozdzielić funkcję walidującą i zbindowanie jej do onsubmit. Walidacja to jedno, a to pod co ktoś sobie to zbinduje to drugie. Po prostu tworzysz kod, który można szerzej wykorzystać.

  2. W js regexp nie potrzebuje ciapków wystarczy, że napiszesz /[a-z]/i. Warto przy tym wspomnieć o dwóch rzeczach.
    a) to flagi (czyli to /i). Oznacza to ignore case czyli nie ma znaczenia czy a jest duże czy małe itd. Jest jeszcze flaga np. g, dzięki której szukasz wszystkich wystapień, a nie zatrzymuje się na pierwszym i koniec.
    b) ciapki w regexp używasz np. przy czymś takim var regex = new RegExp("ReGeX" + testVar + "ReGeX"); czyli jeżeli tworzysz regex ale chcesz np. wrzucić jakąś zmienną w środek. Generalnie w js staraj się tego nie używać i korzystać z konstrukcji //, a new np. w takich wypadkach, to samo z tablicami [] zamiast new Array lub zamiast new Object() to {}.

  3. Nie rób takich łańcuchów bo często są przez to trudne do wyśledzenia błędy :

var button = document.getElementById("zamowienie").onsubmit = function() ...

// Gdy zrobisz np. tak:
function foo () {
var a = b = 20;// tworzysz zmienną a, w obrębie funkcji foo, ale zmienna b już jest globalna. Bo najpierw odywa się przypisanie do b 20 a później var a = b; dlatego lepiej to rozbić
} 

Wracając do zadania, ja bym to zrobił tak:


    function walidacjaImie(imie, blad) { // masz funkcję która robi jedną rzecz, dzięki czemu możesz ją wykorzystać wielokrotnie
        var bledy = document.getElementById(blad);
        var imie = document.getElementById(imie).value;

        if (imie.match(/[a-z]/i)) {
            bledy.innerHTML = "";
            return true;
        }
        else {
            bledy.innerHTML = "Wprowadz imie";
            return false;
        }

    }
    window.onload = function () {
        var formularz = document.getElementById("formularz");
        formularz.onsubmit = function () { // gdy wysyłasz formularz poprzez kliknięcie w button (lub enter) to odpalasz walidacje imienia
            walidacjaImie("imie", "blad");
        }
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1