387
Java programozas, javascript
  • MerlinW
    #347
    Rég jQ-ztam, de alapvetően így kellene:


    function getPPData ( id ){
    return $.post('list.php', { holder: id });
    }

    function putPPData ( data, target ){
    target.append( data );
    }

    $('#ppScanned').blur(function(){
    var ppID = $('#ppScanned').val();
    if ( ppID !== "" ){
    // $.ajaxSetup({async:false}); //szerintem erre semmi szükség
    var target = $( '#cLeft' );

    getPPData(ppID).done(function(ppData) {
    alert ( "2\r\n" + ppData );
    putPPData ( ppData, target );
    });

    }
    });


    Lényeg hogy a promise blokkban kell mindent csinálni, amivel meg akarod várni az eredményt. Több XHR hívást is végezhetsz szimultán, azokat így tudod megvárni:


    var xhr1 = $.ajax();
    var xhr2 = $.ajax();

    $.when(xhr1, xhr2).done(function(xhr1Response, xhr2Response){
    })


    Olvasgass a Deferred és Promise témakörökben. Jó cuccok:)
    Utoljára szerkesztette: MerlinW, 2017.02.05. 14:26:16
  • 355
    #346
    'reggelt!

    Van egy oldalam, rajta egy egyszerű jQuery post, ami az eredményét hozzáfűzi egy div tartalmához. Működik.

    Most szétszedném három részre a dolgot: lenne egy fánksön, ami postol és visszaadja az eredményt, egy, ami ezt megkapja és hozzáfűzi valamihez, és egy (vagy több), ami ezeket használja. Megírtam a kódot így:


    function getPPData ( id ){
    $.post('list.php', { holder: id }).done(function(data){
    alert ( "1\r\n" + data );
    return data;
    });
    }

    function putPPData ( data, target ){
    target.append( data );
    }

    $('#ppScanned').blur(function(){
    var ppID = $('#ppScanned').val();
    if ( ppID !== "" ){
    $.ajaxSetup({async:false});
    var target = $( '#cLeft' );
    var ppData = getPPData ( ppID );
    alert ( "2\r\n" + ppData );
    putPPData ( ppData, target );
    }
    });


    De nem működik. A szegényember-debugja-alert szerint az async ki van kapcsolva, megtörténik az 1. lépés (post, az adatok megjönnek), aztán a 2., de ott a ppData = undefined. Mi a gond? Rosszul adom vissza a post ereményét a returnnel?

    Utoljára szerkesztette: 355, 2017.02.05. 11:32:31
  • MerlinW
    #345
    Még szebb megoldás, kód duplikáció nélkül:

    $(window).resize(function () {

    }).resize();

    A végén a .resize(); triggereli a resize függvényt induláskor.
    Utoljára szerkesztette: MerlinW, 2017.01.23. 10:53:15
  • Bandee28
    #344
    Köszönöm, így már jó.
  • MerlinW
    #343
    Pont azért mert resize eseményben vannak a funkciók. Csinálj a resize-on belüli tevékenységből egy függvényt és hívd meg onready-kor (esetleg $(window).load()-ban) és resize event esetén is. Legyél moduláris:)


    onReady {
    függvény();

    window.resize {
    függvény();
    }
    }

    Utoljára szerkesztette: MerlinW, 2017.01.21. 15:41:44
  • Bandee28
    #342
    Most is így van a resize , majd a hover funkciók benn vannak egy document.ready-ben. Csak akkor műxik, ha átméretezem a böngésző ablakát.
  • MerlinW
    #341
    $(document).ready()
    Utoljára szerkesztette: MerlinW, 2017.01.20. 21:44:27
  • Bandee28
    #340
    Jonnyka, Malakai azt hogy kell megoldani, hogy ne csak átméretezéssel (resize) számítsa ki a felirat pozícióját, hanem már azzal hogy megnyitom a weblapot?

    Thx
  • Bandee28
    #339
    Köszi sikerült hála nektek.
    Az utolsó 2 sort kellett picit átírni:
    .
    .
    .
    pixelLeft = $(window).width() *( (100 - ((move / $(window).width()) * 100)) / 100);
    $('#'+liki+':hover').find('.text').css('left', pixelLeft + 'px');
    });
    });
  • Bandee28
    #338
    Nem tom mi a baj, ilyen bénán rakta be.


    <nav role='navigation'>

    <ul class="topnav clearfix" id="myTopnav">
    <li id="li1" class="trans" >
    <a class="link-1 entypo-user " href="#home">
    <span class="text" data-textId="li1">Bemutatkozás
    </span>
    </a>
    </li>
    <li id="li2" class="trans" >
    <a class="link-2 entypo-book-open " href="#clients">
    <span class="text" data-textId="li2">Mi is ez?</span>
    </a>
    </li>
    <li id="li3" class="trans" >
    <a class="link-3 entypo-basket " href="#about">
    <span class="text" data-textId="li3">Árajánlat</span>
    </a>
    </li>
    <li id="li4" class="trans" >
    <a class="link-4 entypo-mail " href="#contact-us">
    <span data-textId="li4" class="text">Kapcsolat</span>
    </a>
    </li>
    </ul>

    <a href="javascript:void(0);" onclick="myFunction12()">
    <span id="navmin-icon">
    <b style="font-size: 15px; position:relative; bottom: 6px;">MENU</b> <b>&#9776;</b></span>
    </a>
    </nav>

    Utoljára szerkesztette: Bandee28, 2017.01.20. 18:13:01
  • Bandee28
    #337
    Itt a html kód. Ja igen és 4 gomb van. Megpróbáltam nem mükszik.

    	
    <nav role='navigation'>

    <ul class="topnav clearfix" id="myTopnav">
    <li id="li1" class="trans" ><a class="link-1 entypo-user " href="#home"> <span class="text" data-textId="li1">Bemutatkozás</span></a></li>
    <li id="li2" class="trans" ><a class="link-2 entypo-book-open " href="#clients"><span class="text" data-textId="li2">Mi is ez?</span></a></li>
    <li id="li3" class="trans" ><a class="link-3 entypo-basket " href="#about"><span class="text" data-textId="li3">Árajánlat</span></a></li>
    <li id="li4" class="trans" ><a class="link-4 entypo-mail " href="#contact-us"><span data-textId="li4" class="text">Kapcsolat</span></a></li>
    </ul>

    <a href="javascript:void(0);" onclick="myFunction12()"><span id="navmin-icon"><b style="font-size: 15px; position:relative; bottom: 6px;">MENU</b> <b>&#9776;</b></span></a>
    </nav>


    Utoljára szerkesztette: Bandee28, 2017.01.20. 17:40:25
  • Malakai
    #336
    #magicnumbers
  • j0nNyKa
    #335
    #ihateyou
  • MerlinW
    #334
    Az egy sor sem jó. Readability Jonny, readability!!44 :)
  • j0nNyKa
    #333
    jó most írjam meg egy sor kódból?
    alapból az egész logikája kurvakomplex, de igazad van, a switch picit jóabb
  • MerlinW
    #332
    Complexity Jonny, complexity!! :D


    $(window).resize(function () {
    $('nav ul li.trans').hover(function () {
    var liId = $(this).attr('id'),
    move = 0,
    pixelLeft;

    switch (liId) {
    case 'li1':
    move = 341;
    break;
    case 'li2':
    move = 241;
    break;
    case 'li3':
    move = 170.5;
    break;
    case 'li4':
    move = 94.7;
    break;
    }

    pixelLeft = $(window).width() * (100 - ((move / $(window).width()) * 100) / 100);
    $('#li1:hover').find('.text').css('left', pixelLeft + 'px');
    });
    });
  • j0nNyKa
    #331
    1) miért tudna a ff console a liki változódról? hol van hozzáadva a window-hoz?
    2) html kódot is adsz mellé?
    3) használd kérlek a code tag-et, úgy még látszana is valami
    4) minek a String() ?
    5) :D az ifjeidben egy darab egyenlőségek, tehát értékadások vannak, persze hogy nem működik :)
    6) minek a 8 var? tetején deklarálod üresen, aztán meg... hát igazából nem is kell var
    7) deklarálod a liki-t (jó beszédes), aztán meg nem használod..
    8) a logikád elég fura, pakolászod az eventeket a resize-ra meg a hoverre a végtelenségig, átgondolnám

    így már kinéz valahogy, meg működik is
    $(window).resize(function() {
    $('nav ul li.trans').hover(function() {
    var liId = $(this).attr('id'),
    move = 0,
    pixelLeft;

    if (liId === 'li1') {
    move = 341;
    }
    else if (liId === 'li2') {
    move = 241;
    }
    else if (liId === 'li3') {
    move = 170.5;
    }
    else if (liId === 'li4') {
    move = 94.7;
    }

    pixelLeft = $(window).width() * (100 - ((move / $(window).width()) * 100) / 100);
    $('#li1:hover').find('.text').css('left', pixelLeft + 'px');
    });
    });

    Utoljára szerkesztette: j0nNyKa, 2017.01.20. 15:56:04
  • Bandee28
    #330
    Üdv,

    Nézzetek rá erre a kódra, valamiért nem műxik. Van egy menűsorom rajta 4 gombbal, ami érzékeny lenne a weblap szélességének változtatására, ha egy gomb fölé viszem az egeret egy kis felirat jelenik meg felette. A felirat position: absolute -ra van állítva, ha változtatom a böngészőm szélességét a felirat már rossz helyen jelenik meg, ezt próbáltam megoldani. Légyszí nézzétek át, lehet hogy csak szintaktikai hiba van.

    $(window).resize(function() {


    $('nav ul li.trans').hover(function(){
    var liki = $(this).attr('id');

    if ($(this).attr('id') = "li1") {
    var actualLeft = 100 - ((341 / $(window).width())* 100);
    var pixelLeft= $(window).width() * (actualLeft / 100);
    $('#li1:hover .text').css('left', String(pixelLeft)+'px');
    } else if ($(this).attr('id') = "li2") {
    var actualLeft = 100 - ((241 / $(window).width())* 100);
    var pixelLeft= $(window).width() * (actualLeft / 100);
    $('#li2:hover .text').css('left', String(pixelLeft)+'px');
    } else if ($(this).attr('id') = "li3") {
    var actualLeft = 100 - ((170.5 / $(window).width())* 100);
    var pixelLeft= $(window).width() * (actualLeft / 100);
    $('#li3:hover .text').css('left', String(pixelLeft)+'px');
    } else if ($(this).attr('id') = "li4") {
    var actualLeft = 100 - ((94.7 / $(window).width())* 100);
    var pixelLeft= $(window).width() * (actualLeft / 100);
    $('#li4:hover .text').css('left', String(pixelLeft)+'px');
    }


    });
    });

    Az az érdekes hogy a firefox konzolba a "liki" -re is not defined-ot ír.
  • MerlinW
    #329
    Azt hittem a nagy képről való lehúzásra akarja eltüntetni a képet :D A kód elemzésébe nem volt tegnap este türelmem belemenni, köszi neked:)
  • Bandee28
    #328
    Köszönöm a válaszotokat: maLakai, MerlinW . Átírom, most már működik.
  • Malakai
    #327
    Azon kívül, hogy elég össze-vissza ahogy írtad a javascriptet a konkrét problémád forrása, hogy akkor hozod létre a listenert, amikor az egér már rajta van a td-n. A js engine úgy működik, hogy mouseleave csak akkor lehet, ha volt mouseenter, amit addig nem érzékelt, mert nem is figyelte (első alkalommal nem volt még semilyen listener, se enter, se leave).
    Ha kiemeled a listenert kívülre és előrre regisztrálod, akkor meg is van oldva.
    Egy kis takarítás/egyszerüsítéssel ez kb így néz ki.
    Pár egyéb:
    - Ennyi alapján kephover class-t feleslegesen pakolászod le-fel, nem tudom miért nincs eleve a megjelenítő div-en.
    - Kondíciók a listenerekben fussanak, ne pedig a listenereket cserélgesd/pakolásszad egymásra.
    - Nézz picit utána mi mikor fut le javascript-ben, pl amit alján tesztelsz, hogy klikk az 2, akkor myFunction1-et használd az soha nem fog teljesülni, azon a ponton a klikk mindig 1, mivel az lefut mindenféle kattintás előtt.
  • MerlinW
    #326
    $(this).hover(function() {
    $('.zoom_01').mouseleave(function(){
    $('.kephover').slideUp("500");
    klikk= 1;
    });

    helyett így:

    $('#vetito').mouseleave(function(){
    $('.kephover').slideUp("500");
    klikk= 1;
    });
  • Bandee28
    #325
    Üdv,

    Ránéznétek erre a kis progira ? Az a lényeg hogy ha rákattintok a kis képekre, megjelenik egy div-be nagyobba. Majd úgy lehet eltüntetni hogy még egyszer rákattintok a kis képre vagy leviszem róla a kurzort. Ha megnézitek a hover nem jól működik, mert csak akkor reagál, ha leviszem a kis képről a kurzort, majd visszahelyezem rá és csak akkor tűnik el a kép, ha ezután lehúzom a kurzort. Ha ezt egyszer megcsinálom utána már jó. Valaki megoldást rá?

    Itt a progi
    Utoljára szerkesztette: Bandee28, 2016.12.26. 21:56:28
  • 355
    #324
    Bakker, a :hidden. A toggle hiddenre állít mindent, így aztán nincs reset. Hüje, aki kopipészttel programoz :)
  • 355
    #323
    'reggelt!

    Van egy tök egyszerűnek tűnő scriptem, mégse megy.


    $( '#bugForm' ).toggle( 750, function(){
    $(':input','#bugForm')
    .not(':button, :submit, :reset, :hidden')
    .val('')
    .removeAttr('checked')
    .removeAttr('selected');
    });


    Ha futtatom, nem történik meg a form reset. Ha simán kiveszem a reset részt a toggle callback-jéből, akkor megtörténik, de látható, mert azonnal lefut az animáció elindulása után (és pont ezt kerülném el az elegancia végett).

    Már szétgugliztam magam, de mindenhol azt írják, hogy a fenti script a jó módszer. Akkor mi a gond?
    Utoljára szerkesztette: 355, 2016.12.15. 14:02:33
  • MerlinW
    #322
    AngularJS 1.6 changes, braking changes
    Utoljára szerkesztette: MerlinW, 2016.11.07. 09:47:55
  • MerlinW
    #321
    Nem. Le kell töltened/telepítened a perl-t, majd parancssorból futtatni. A lenti linken le van írva lépésről lépésre.
    Utoljára szerkesztette: MerlinW, 2016.04.30. 20:05:37
  • DonPedro22
    #320
    Köszi... és egy Notepad++al tudom futtatni?
  • MerlinW
    #319
    Perl
  • DonPedro22
    #318
    Nem vagyok egyszerű mi? :D ok itt a részlet...


    # No im not making a friendly Code where you just have to start and type your shit in.
    # Use brain.exe to fill in the stuff you need.

    %config = (
    Server => "sweetscents.com",
    Path => "/cgi-bin/",
    From => "admin".chr(64)."freehostia.com",
    To => "Luxpower".chr(64)."web.de",
    Name => "Perforin",
    MSG => "$MSG"
    );


    $sock = new IO::Socket::INET(PeerAddr => $config{'Server'},
    PeerPort => 80,
    Proto => 'tcp',
    Timeout => 1) || die("[+] Could not connect!\n");

    $data = 'refpage=&reftitle=&Friends='.$config{'To'}.'&SenderName='.$config{'Name'}.'&From='.$config{'From'}.'&PersonalMsg='.$config{'MSG'};

    $lngt = length($data);
  • MerlinW
    #317
    A lényeg, hogy még véletlenül se mutass kódrészletet, mert a végén még kitaláljuk helyetted. Well done .

    Illetve legközelebb se írd oda a Javascript topikban feltett kérdésed mellé, hogy nem Javascript, mert az túlságosan is felgyorsítaná a kommunikációt.
    Utoljára szerkesztette: MerlinW, 2016.04.29. 19:46:38
  • DonPedro22
    #316
    Eltaláltad.... :) csak nem tudtam melyik topikban lenne érdemes megkérdeznem.
    Találtam neten kész programokat vagy is csak a forráskódot csak annyi hogy életre kellene kelteni, de sajna nem tudom milyen nyelvben írták...
  • j0nNyKa
    #315
    biztos vagyok benne hogy köze nem volt a kérdésnek a javascripthez
  • MerlinW
    #314
    Nem. A fájl kiterjesztése legyen .js
    Hozz létre egy új fájlt .html kiterszesztéssel és írd bele:

    <script type="text/javascript" src="valami.js"></script>

    Majd dupla katt a html fájlodon és a böngészőben láthatod amit a javascript-ed csinál,
  • DonPedro22
    #313
    Ha txt-ben kapok egy komplett programot azt hogy tudom átalakítani működő programmá? mármint hogy csinálhatok exe file-t belőle? látszik nem értek a programozáshoz :P
  • 355
    #312
    Kösz' a tippet! A dateISO-t nem maskként kezeli, úgyhogy nem hiszem, hogy tartalmat adna, de holnap kipróbálom.

    Azért sem hiszem, mert ha megadok %-ot, akkor az üresen hagyott saleBeg-et kihagyottnak jelzi és nem érvénytelen formátumúnak.
  • MerlinW
    #311
    Most csak gyorsban: nem lehet hogy a dateISO miatt mindig van tartalom? Írasd ki konzolba az inputok tartalmát.
  • 355
    #310
    'estét! Kéne segítség (megint), most a jQuery Validation plugin használatában.

    Van 3 inputom: saleBeg, saleEnd (leértékelés első és utolsó napja) és salePerc (árengedmény). Ezt szeretném összehozni:

    - ha van saleBeg, kell lennie salePercnek is;
    - ha van saleEnd, kell lennie saleBegnek is és ennek egyenlőnek vagy nagyobbnak kell lennie annál (megoldva: greaterOrEqual);
    - ha van salePerc, annak 1 és 100 között kell lennie és kell lennie legalább saleBegnek.

    Itt tartok:


    saleBeg : {
    dateISO : true,
    required : function ( ) {
    return ( $ ( '#saleEnd' ) . not ( ':empty' ) ? true : false ) ;
    }
    } ,
    saleEnd : {
    dateISO : true ,
    greaterOrEqual : '#saleBeg'
    } ,
    salePerc : {
    required : function ( ) {
    return ( $ ( '#saleBeg' ) . not ( ':empty' ) ? true : false ) ;
    } ,
    number : true ,
    range : [ 1 , 100 ]
    }


    Ha ki vannak töltve a mezők bármilyen csoportban, az ellenőrzés jól működik.

    A hiba az, hogy nem kéne neki, de mégis megköveteli mind a három mező kitöltését, ha mind a három üres (mert nem akciós a cucc). Mit írtam rosszul?
  • MerlinW
    #309
    Valami ilyesmi most a dolog:

    karma-common.js:


    var defaultVariables = {
    "globalConfig": {"SERVER_URL": "http://testServerPath/"}
    };

    var defaultDependencies = {
    "$httpBackend": "$httpBackend",
    "$rootScope": "$rootScope",
    "$timeout": "$timeout",
    "$interval": "$interval",
    "$controller": "$controller",
    "$state": "$state"
    };

    var testHttpMock = function (method, mockUrl, httpResponseMock, dataPromise) {
    $httpBackend.expect(method, mockUrl).respond({data: httpResponseMock});
    var functionResult;
    dataPromise.then(function (response) {
    functionResult = response.data;
    });
    $httpBackend.flush();
    return functionResult;
    };

    var testInjectVariables = function (variables) {
    if (defaultVariables) {
    angular.forEach(defaultVariables, function (variableValue, variableName) {
    window[variableName] = variableValue;
    });
    }

    if (variables) {
    angular.forEach(variables, function (variableValue, variableName) {
    window[variableName] = variableValue;
    });
    }
    };

    var testInjectDependencies = function (dependencies) {
    return inject(function ($injector) {
    /*jslint evil: true */
    if (defaultDependencies) {
    angular.forEach(defaultDependencies, function (dependencyValue, dependencyName) {
    window[dependencyName] = eval($injector.get(dependencyValue));
    });
    }

    if (dependencies) {
    angular.forEach(dependencies, function (dependencyValue, dependencyName) {
    window[dependencyName] = eval($injector.get(dependencyValue));
    });
    }
    })
    };



    *.spec.js

    describe('testSomething', function () {

    //-----------------------------------------------------------------------------------
    //UNIT GLOBALS
    var variables = {};
    var dependencies = {};

    //-----------------------------------------------------------------------------------
    beforeEach(function () {
    //MODULE INJECTION
    module("ngHRM.admin");

    //SERVICE INJECTION
    dependencies.CustomConstants = "CustomConstants";
    dependencies.CustomizerService = "CustomizerService";

    //VARIABLE INJECTION
    variables.something = {"key": "value"}};
    variables.something_more = "foo";

    //PROVIDERS
    module(function ($provide) {
    //VALUES -> $provide.value('variable', variable);
    //SERVICES -> $provide.service('ServiceName', function () {}
    //FUNCTIONS -> this.variable = jasmine.createSpy('variable').and.callFake(function () { return result; });
    });
    });

    //-----------------------------------------------------------------------------------
    //LOAD THIS IN EVERY <it>
    function doInject() {
    //AUTOMATIC DEPENDENCY INJECTION
    testInjectVariables(variables);
    testInjectDependencies(dependencies);

    //CUSTOM INJECTIONS
    inject(function () {
    //SCOPE -> scope = $rootScope.$new();
    //SPY -> spyOn(,);
    //CTRL -> controller = $controller('controllerName', { $scope: scope, $state: state });
    });
    }

    //-----------------------------------------------------------------------------------
    //DEFAULT afterEach if we have $httpBackend injected
    afterEach(function () {
    if (defaultDependencies.$httpBackend) {
    $httpBackend.verifyNoOutstandingExpectation();
    $httpBackend.verifyNoOutstandingRequest();
    }
    });


    // ------------------------------------ TEST CASES ---------------------------------------

    it('should happen something', function () {
    doInject();
    });

    });
  • MerlinW
    #308
    Az már más:) így érthetőbb