JavaScript e.target

di il
7 risposte

JavaScript e.target

Ciao a tutti ho una pagina che utilizza e.target e per renderla compatibile con internet explorer l'ho sostituito con event.srcElement. Mi chiedo se event.srcElement è compatibile su tutti i browser? Per motivi di compatibilità meglio utilizzare e.target o event.srcElement?

7 Risposte

  • Re: JavaScript e.target

    Stando a quanto dice la , questa proprietà è deprecata, ovvero non andrebbe mai utilizzata in nuovi siti; tuttavia, viene specificato anche che i maggiori browser ancora lo supportano come alias solo per motivi di compatibilità all'indietro.

    L'ideale sarebbe quindi usare al suo posto , che si direbbe comunque valido per la totalità dei browser incluso Internet Explorer, anche se dalla versione 9 in poi.

    In termini di compatibilità quindi, dovrebbe essere esclusa la versione 8 e precedenti.
    Parliamo di una versione risalente comunque a ben 10 anni fa... in termini di sicurezza, mi verrebbero i brividi a usarla.

    Ciao!
  • Re: JavaScript e.target

    Ciao esiste un modo ibrido per utilizzare e.target ed event.srcElement (far in modo che se qualcuno utilizza internet explorer 8 o inferiore, lo script utilizzi event.srcElement e nei browser moderni utilizza e.target)? Mi chiedo se questa compatibilità nei browser per event.srcElement verrà per sempre mantenuta. Ah non riesco a scrivere 2 parti di uno script in stringa jQuery.
    var td = e.target;
    grid_options.onchange = function(e){
          grid_size = parseInt(e.target.value);
          init();
        };
    Come si scrivono queste 2 parti di uno script in stringa jQuery 1.0? Ci ho provato ma visualizzo errori. Grazie per la cordialità.
  • Re: JavaScript e.target

    fede220 ha scritto:


    Ciao esiste un modo ibrido per utilizzare e.target ed event.srcElement (far in modo che se qualcuno utilizza internet explorer 8 o inferiore, lo script utilizzi event.srcElement e nei browser moderni utilizza e.target)?
    Sì: puoi testare con un if() quale dei due è valorizzato.
    
    if (event.srcElement) {
      // ...
    } else {
      // ...
    }
    

    fede220 ha scritto:


    Mi chiedo se questa compatibilità nei browser per event.srcElement verrà per sempre mantenuta.
    Me lo chiedo anche io, ma indicativamente direi di no, poiché la proprietà è deprecata, ma non è dato sapere quando verrà eliminata, poiché la decisione dipende dai vendor dei browser.

    fede220 ha scritto:


    Ah non riesco a scrivere 2 parti di uno script in stringa jQuery.
    [...]
    Come si scrivono queste 2 parti di uno script in stringa jQuery 1.0?
    Ci ho provato ma visualizzo errori.
    Cosa vuol dire "in stringa JQuery"? JQuery è una libreria, e non ha stringhe bensì funzioni.
    Posta il codice che hai scritto e riporta gli errori.

    Ciao!
  • Re: JavaScript e.target

    Ho cercato sulla documentazione di jQuery ed ho modificato le funzioni. Ho provato ma non funziona e visualizzo questi erroi "ReferenceError: TicTacToe is not defined" "SyntaxError: missing ) after argument list" non capisco dove ho sbagliato.
     $("grid_options").change(function(e) {
          $("grid_size").parseInt("changed" + e.target.value);
          init();
        };
    var td = $(e.target);
  • Re: JavaScript e.target

    fede220 ha scritto:


    Ho provato ma non funziona e visualizzo questi erroi "ReferenceError: TicTacToe is not defined" "SyntaxError: missing ) after argument list" non capisco dove ho sbagliato.
    L'elemento riportato nell'errore non appare neanche nel codice, quindi non ho la più pallida idea di ciò che stai cercando di fare, di ciò che stai utilizzando, di qual è l'obiettivo finale, nulla di nulla. Come faccio a darti indizi?
  • Re: JavaScript e.target

    Il codice è questo ma visualizzo errori "ReferenceError: TicTacToe is not defined", "SyntaxError: missing ) after argument list" e "TypeError: td.getAttribute is not a function". Ho notato anche che cliccando sulle caselle non vedo più X e O.
    TicTacToe('.game-panel');
    
     function TicTacToe(selector) {
    
        var main_element = $(selector)[0],
            score_X = $('.score.X')[0],
            score_O = $('.score.O')[0],
            board = $('.board')[0],
            grid_options = $('.grid-options')[0],
            reset_btn = $('.btn-reset')[0];
    
        var grid_size = 3,
            moves = 0,
            scores = {
                X: 0,
                O: 0
            },
            data = {};
    
        $("grid_options").change(function(e) {
          $("grid_size").parseInt("changed" + e.target.value);
          init();
        });
    
        init();
    	
    	reset_btn.onclick = function(e){
    	  reset_btn = init();
    	};
    
        function paint() {
            var table = '<table>';
            for (var i = 0; i < grid_size; i++) {
                table += '<tr>';
                for (var j = 0; j < grid_size; j++) {
                    table += '<td row="' + i + '" column="' + j + '"></td>';
                }
                table += "</tr>";
            }
            board.innerHTML = table;
    
            var columns = $('td');
            for (i = 0; i < columns.length; i++) {
                columns[i].onclick = function(e){
    			td = mark(e);
    			}
            }
    
        }
    
        function mark(e) {
    
            var td = $(e.target);
    
            if (td.innerHTML) {
                return;
            }
    
            var row = $( "td" ).attr( "row" ),
                column = $( "td" ).attr( "column" );
    
            var current_mark = moves % 2 === 0
                ? 'X'
                : 'O';
    
            td.innerHTML = current_mark;
            $(td).addClass(current_mark);
            data[row + '' + column] = current_mark;
    
            moves++;
    
            setTimeout(function() {
                if (didWin(current_mark)) {
                    alert(current_mark + ' vince la partita!');
                    scores[current_mark]++;
                    updateScoreboard();
                    empty();
                } else if (moves === Math.pow(grid_size, 2)) {
                    alert("Pareggio!");
                    empty();
                }
            }, 0);
    
        }
    
        function didWin(mark) {
    
            var vertical_count = 0,
                horizontal_count = 0,
                right_to_left_count = 0,
                left_to_right_count = 0;
    
            for (var i = 0; i < grid_size; i++) {
    
                vertical_count = 0;
                horizontal_count = 0;
    
                for (var j = 0; j < grid_size; j++) {
    
                    if (data[i + '' + j] == mark) {
                        horizontal_count++;
                    }
    
                    if (data[j + '' + i] == mark) {
                        vertical_count++;
                    }
    
                }
    
                if (data[i + '' + i] == mark) {
                    left_to_right_count++;
                }
    
                if (data[(grid_size - 1 - i) + '' + i] == mark) {
                    right_to_left_count++;
                }
    
                if (horizontal_count == grid_size || vertical_count == grid_size) {
                    return true;
                }
    
            }
    
            if (left_to_right_count == grid_size || right_to_left_count == grid_size) {
                return true;
            }
    
            return false;
        }
    
        function empty() {
            moves = 0;
            paint();
            data = {};
        }
    
        function init() {
            empty();
            scores = {
                X: 0,
                O: 0
            };
            updateScoreboard();
        }
    
        function updateScoreboard() {
            score_X.innerHTML = scores.X;
            score_O.innerHTML = scores.O;
        }
    
    }
  • Re: JavaScript e.target

    fede220 ha scritto:


    Il codice è questo ma visualizzo errori "ReferenceError: TicTacToe is not defined", "SyntaxError: missing ) after argument list" e "TypeError: td.getAttribute is not a function"
    Intanto nel tuo codice chiami la funzione TicTacToe prima di averla definita.

    Per il resto, è piuttosto difficile da leggere, c'è una commistione dell'uso di JQuery e metodi diretti del DOM, figuriamoci se riesco a debuggarlo per un errore all'interno della libreria (visto che il metodo nell'errore non compare nel tuo codice), e potrebbe anche essere legato a incompatibilità con il browser (visto che l'argomento iniziale era questo).

    Per me è impossibile esaminare un codice in questi termini.
Devi accedere o registrarti per scrivere nel forum
7 risposte