• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] (APP) In Favoriten fügt nur 1 mal hinzu

sedu

New member
Guten Tag,

Ich erstelle eine App für die Unihockey in der Schweiz mit Javascript/Jquery.

Doch mein Problem ist, wenn ich 2 Teams die gleichen Namen haben aber nicht in der gleichen Liga spielen versuche hinzuzufügen, funktioniert's nicht.

Kann mir da jemand helfen?

Code:
function showFavoriten() {
    loading("show");

    getAllFavoriten(function (arr) {
        var list = arr.sort(function (a, b) {
            return a.leagueid > b.leagueid || (a.leagueid == b.leagueid && a.gruppeid > b.gruppeid);
        });
        var html = "";
        var empty = true;
        html += "<ul data-role='listview'>";
        $.each(arr, function (i, v) {
            empty = false;
          	if (!elementVorhanden(list, v.name)) {
                html += "<li>";
                    html += "<a onclick='loadNavi(\"1d\", " + v.leagueid + "," + v.gruppeid + ", \"favoriten\")'>";
                        html += "<h2>" + v.name + "</h3>";
                        html += "<p>" + v.league + " - " + v.gruppe + "</p>";
                    html += "</a>";
                html += "</li>";
                list.push(v.name);
			}
        });
        html += "</ul>";
        if (empty) {
            $("#content").html("Keine Favoriten gespeichert!").show();
        } else {
            $("#content").html(html).show().trigger("create");
        }
        $("#maintitel").html("Favoriten");
        loading("hide");

    });
}

	
function elementVorhanden(arr, ele) {
    ele = ele + "";
    var rn = false;
    $.each(arr, function (i, v) {
        if (v == ele) {
            rn = true;
        }
    });
    return rn;
}


function showAddFavorit(leagueid, groupid, l, g) {
    var html = "";

    loading("show");

    var request = getRequest(1, "?options=teams&l=" + leagueid + "&g=" + groupid);
    //console.log(request)
    html += "<div class='favoritenliste'>";
    html += "<div class='text'>Sie können hier ein Team aus dieser Gruppe Ihrer Favoritenliste hinzufügen.<br/> Die Teams können Sie danach jederzeit unter 'Favoriten' abrufen.</div>";

    if (request) {
        $.each(request.teams.team, function (i, v) {
            //console.log(v);
            html += "<a class='team' onclick='showFavoritSaveDialog(\"" + v["#text"] + "\", " + leagueid + ", " + groupid + ", \""+  l + "\", \"" + g + "\");'>" + v["#text"] + "</a>";

        });
    }

    html += "</div>";

    html += "<div class='favoritdialog'></div>";


    $("#content").html(html).show();
    $("#maintitel").html("Favoriten");
    loading("hide");
}

function showFavoritSaveDialog(name, lid, gid, l, g) {

    $(".favoritenliste").hide();

    var html = "<div class='text'>Möchten Sie das Team '" + name + "' zu Ihrer Favoritenliste hinzufügen?</div>";
    html += "<div class='buttonwrap' data-role='controlgroup' data-type='horizontal'>";
    html += "<a data-role='button' class='ja'>Ja</a>";
    html += "<a data-role='button' class='nein'>Nein</a>";
    html += "</div>";
    $(".favoritdialog").html(html).show();

    $(".nein").click(function () {

        $(".favoritenliste").show();
        $(".favoritdialog").hide();

    });

    $(".favoritdialog").trigger("create");
    $(".ja").click(function () {

        getAllFavoriten(function (arr) {

            var vorhanden = false;

            $.each(arr, function (i, v) {
                //console.log(name);
                if (name == v.name) {
                    vorhanden = true;
                }
            });
			
			/* Überschreiben, dass auf jeden Fall der Favorit hinzugefügt werden kann.*/
			vorhanden = false;

            if (vorhanden == true) {
                html = "<div class='text'>'" + name + "' ist bereits auf der Liste!</div><a data-role='button' onclick='back()'>OK</a>";
            } else {
                try {

                    app.db.transaction(function (tx) {
                        var sql = "INSERT INTO favoriten (name, leagueid, gruppeid, league, gruppe) VALUES('" + name + "', '" + lid + "', '" + gid + "', '" + l + "', '" + g + "')";
                        tx.executeSql(sql);
                    });
                    html = "<div class='text'>'" + name + "' wurde erfolgreich gespeichert!</div><a data-role='button' onclick='back()'>OK</a>";
                } catch (e) {
                    html = "Beim Abspeichern ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.<br/><a data-role='button' onclick='back()'>OK</a>";
                }
            }
            $(".favoritdialog").html(html).trigger("create");
            $("#maintitel").html("Favoriten");
        });
    });

}

function getAllFavoriten(callback) {
    var vdata = [];
    app.db.transaction(function (tx) {
        tx.executeSql(
            "SELECT * FROM favoriten",
            [],
            function (ts, result) {
                if (result.rows && result.rows.length) {
                    for (i = 0; i < result.rows.length; i++) {
                        vdata.push(result.rows.item(i));
                    }
                }
                if (typeof (callback) == "function") callback(vdata);
            },
            function (err) {
                //console.log("Fehler beim Auslesen der DB");
                //console.log(err);
            }
        );
    });
}
 
Doch mein Problem ist, wenn ich 2 Teams die gleichen Namen haben aber nicht in der gleichen Liga spielen versuche hinzuzufügen, funktioniert's nicht.
Das liegt daran, daß der Check dazu lediglich die Team-Namen prüft, nicht aber die Team-IDs.
 
Dein ganzes Konzept mit der list-Variable ist irgendwie verquer. Denn aus der DB kommen da ja anscheinend Objekte rein (deine sort-Funktion ist ja auch entsprechend aufgebaut... aber ich sehe gerade, dass der Rückgabewert falsch ist. Da sollte -1, 0 oder 1 zurückgegeben werden und kein Boolean), aber nachher schreibst du nur Strings (die Namen) rein...
 
Zurück
Oben