webForumDet fria alternativet

JQuery få fram ID på kontroll som triggar event

JavaScript

17 svar · 1 741 visningar · startad av Sanji

Medlem sedan juli 2009355 inlägg
Frågan#1

Hej! Jag håller på och ska lära mig jquery och ajax nu, jag har en asp.net applikation som jag försöker använda detta i. Jag har ett obestämt antal textboxar som skapas dynamiskt från code-behind filen. alla boxar har samma klass, och jag kör ett change-event på dessa med hjälp av jquery. jag började med att bara lägga in en alert i funktionen så att jag såg att det fungerade, men nu ska jag försöka göra någonting användbart av det hela och tänkte uppdatera lite data i en mssql-databas med hjälp av jquery och en webservice.

Det jag då behöver är att få ut ID't på just den textboxen som triggat eventet och skicka med det till min webservice, så jag kan uppdatera rätt post i databasen. Jag behöver även få med texten i textboxen. Hur kan jag uppnå detta?

här kommer lite kod som jag använder just nu:


$(".textboxdotted").change(function () {
                $.ajax({
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    url: "../webservices/updates.asmx/updatePrice",
                    data: {},
                    dataType: "json"
                });
                alert("This message is shown with JQuery!");
            });

jag ska alltså skicka med data, och detta måste vara i json-format om jag har förstått rätt(vill inte använda xml). Det blir första gången jag testar detta, men om jag bara lyckas få ut ID och text från textboxen så borde jag kunna lösa resten själv!

Medlem sedan mars 20007 896 inlägg
#2

Till den anonyma funktionen som du skickar till change(), kan du få ut en parameter som innehåller elementet.

$('.textboxdotted').change(function(e) {
    var id = $(e.target).attr('id');
    ...
});
Medlem sedan juli 2009355 inlägg
#3

Finns det något sätt att se om jag lyckats hitta ID't med t.ex. firebug?

Och en annan fråga, kan jag använda mig av klasser i min webservice, som jag annars använder från code-behind filerna? eller är det bättre att göra en storedprocedure för att uppdatera rätt post och sedan skicka allt från webservicen till den?

koden ser ut så här nu:

<script type="text/javascript">
        $(function () { // dom-ready, just to be on the safe side 
            $('.combobox').jec();

            $(".textboxdotted").change(function (e) {
                var priceID = $(e.target).attr('id');
                var price = $(e.target).attr('text');
                $.ajax({
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    url: "../webservices/updates.asmx/updatePrice",
                    data: { "priceID": priceID, "price": price },
                    dataType: "json"
                });
                alert("This message is shown with JQuery!");
            });

        });
</script>

och funktionen i min webservce

[WebMethod()]
        public void updatePrice(string price, string priceID)
        {
            priceID.Replace("txtEditPrice", "");
            Price pr = new Price();
            pr.ID = priceID;
            pr.price = price;
            pr.Selected = false;
            
            
            
            InquiriesDatabase.Inquiries.UpdatePrice_PriceOnly(pr);
        }

här försöker jag använda en klass som ligger på servern.

Medlem sedan juni 20019 519 inlägg
#4

kolla om priceID har något värde om den inte ha något värde, gör inte ajax anropet.

Medlem sedan juli 2009355 inlägg
#5

smart! återkommer straxt!

Medlem sedan juli 2009355 inlägg
#6

så här ser det ut nu:

$(".textboxdotted").change(function (e) {
                var priceID = null;
                priceID = $(e.target).attr('id');
                var price = null;
                price = $(e.target).attr('text');
                $.ajax({
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    url: "../webservices/updates.asmx/updatePrice",
                    data: { "priceID": priceID, "price": price },
                    dataType: "json",
                    success: function () { alert("det fungerar!"); }

                });
                if (priceID != null) {
                   alert(priceID);
                }
            });

alerten som skriver ut id't får rätt värde!

dock verkar det som att denna kod inte körs: success: function () { alert("det fungerar!"); }

vilket betyder att det är något fel med min kod för att anropa min webservice... men ett steg närmare är jag! jag kanske borde skapa en ny tråd för det problemet?

Medlem sedan juni 20019 519 inlägg
#7

If frågan måste ställas innan du kör Ajax... Om du inte ha ett id så skall den ju INTE köras... Eller har jag missförstått dig?

Medlem sedan juli 2009355 inlägg
#8

if-satsen lade jag bara in för att se att den kom dit, och för att se om jag fick med något id eller inte. borde jag lägga den före eller runt ajaxkoden?

borde inte denna rad med kod öppna en alert som visar en text om det gick att anropa min webservice?

success: function () { alert("det fungerar!"); }

finns det en motsvarighet till successkommandot, t.ex. "failed" eller liknande så jag kan se om den inte lyckas? jag tar google så länge så kanske jag hittar ^^

Medlem sedan juli 2009355 inlägg
#9

jag hittade den, det är "error" jag ska använda mig av!

något sådant?

error: function(){     alert('failure');   }
Medlem sedan juli 2009355 inlägg
#10

har nu testat att lägga in error koden så här:

$.ajax({
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    url: "../webservices/updates.asmx/updatePrice",
                    data: { "priceID": priceID, "price": price },
                    dataType: "json",
                    success: function () { alert("det fungerar!"); },
                    error: function () { alert('Det fungerade inte!'); } 

                });

nu när jag ändrade en text i en av textboxarna så fick jag fram meddelandet "Det fungerade inte!". det betyder att det är däri som problemet ligger.

är det kanske denna rad som är fel?

data: { "priceID": priceID, "price": price },

Medlem sedan juni 20019 519 inlägg
#11

Sanji skrev:

if-satsen lade jag bara in för att se att den kom dit, och för att se om jag fick med något id eller inte. borde jag lägga den före eller runt ajaxkoden?
[...]
finns det en motsvarighet till successkommandot, t.ex. "failed" eller liknande så jag kan se om den inte lyckas? jag tar google så länge så kanske jag hittar ^^

Ja, runt är väl smart, fail få du ju kasta på serversidan också, så att jquery vet att det bli fel.

Medlem sedan juli 2009355 inlägg
#12

okej, jag lägger den runt ajaxkoden då ^^

Dessutom hittade jag felet med data-raden. den tillrättade ser ut så här:

data: '{priceID: "' + priceID +'",price: "' + price +'" }'

återkommer med en summering av det jag har kvar ^^ eventuellt avsluta denna tråd och ta det sista i en ny beroende på vad det är.

Medlem sedan juni 20019 519 inlägg
#13
data: '{"priceID": "' + priceID +'","price": "' + price +'" }'

bör det nog vara om man skall följa reglerna med JSON.

Medlem sedan juli 2009355 inlägg
#14

jag fick det att fungera med min kod jag skrev, men tack för att du hjälper mig med att lära mig rätt från början :) jag har alltid tyckt om detta forum, det finns alltid kunniga personer som hjälper till, och jag har lärt mig otroligt mycket sedan jag skapade mitt konto här! tack till SPiN och voigtann1 för all hjälp! Och extra mycket tack till dig voigtann1, du har hjälpt mig massor vid flera tillfällen!

//Marcus

Medlem sedan mars 20007 896 inlägg
#15

voigtann1 skrev:

data: '{"priceID": "' + priceID +'","price": "' + price +'" }'

bör det nog vara om man skall följa reglerna med JSON.

Stämmer det verkligen? Jag hittar ingenting som säger att JSON kräver (enl. regler) en sträng som objektegenskap (property). Däremot kan jag hålla med om att man bör hålla sig till det, så att man inte är låst till [a-zA-Z]{1}[a-zA-Z0-9] som egenskapsnamn. Om man innesluter namnet innanför citationstecken (enkla eller dubbla), så kan man använda vissa specialtecken i namnet;

Ogiltigt:

var o  = {ett-namn: 'ett värde'};
var o2 = {ett namn: 'ett värde'};

Giltigt:

var o  = {'ett-namn': 'ett värde'};
var o2 = {'ett namn': 'ett värde'};
Medlem sedan juni 20019 519 inlägg
#16

från jquery getJSON http://api.jquery.com/jQuery.getJSON/ :

Important: As of jQuery 1.4, if the JSON file contains a syntax error, the request will usually fail silently. Avoid frequent hand-editing of JSON data for this reason. JSON is a data-interchange format with syntax rules that are stricter than those of JavaScript's object literal notation. For example, all strings represented in JSON, whether they are properties or values, must be enclosed in double-quotes. For details on the JSON format, see http://json.org/.

Så som jag har förstått (när jag hämtar JSON med jquery) så kommer den inte säga att {data: "test"} är korrekt men {"data": "test"} är det.

Medlem sedan mars 20007 896 inlägg
#17

Gött, jag har tittat över json.org utan att hitta något - tänkte inte på att titta på jQuery.com! Spännande att det ska vara citationstecken (") också, och inte Javascripts tillåtna syntax. Då får jag se över mina json-data-utbytes-funktioner och -klasser :)

Tack! (För extra arbetet :p ;))

Medlem sedan juni 20019 519 inlägg
#18

SPiN skrev:

Gött, jag har tittat över json.org utan att hitta något - tänkte inte på att titta på jQuery.com! Spännande att det ska vara citationstecken (") också, och inte Javascripts tillåtna syntax. Då får jag se över mina json-data-utbytes-funktioner och -klasser :)

Tack! (För extra arbetet :p ;))

Var inget extra arbete, fick reda på detta själv förra veckan: http://www.webforum.nu/showpost.php?p=1530678&postcount=9 ;)

261 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)