Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrócenie kodu .js
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Orgin
Witam - mam taki kod jak poniżej, ale chciałbym umieścić 500 elementów. Ręczne wbijanie tylu elementów jest drakońskie. Jak to skrócić?
registration = function (local_conf)
{
if (typeof jQuery === 'undefined') {
throw 'registration exception: jQuery not found.';
}

var conf = {};

conf.boxId = null;
conf.env = null;

/**
* @param {Object} data
*/
var init = function (local_conf)
{
conf = jQuery.extend(conf, local_conf);

//
init = function () { };


jQuery( 'div.chamber_menu a' ).click( function()
{
var menuType = this.name;

jQuery( 'div.chamber_menu a' ).attr( 'class', '' );
jQuery( this ).attr( 'class', 'active' );

switch(menuType) {
case '0-1':
jQuery('div.form-2').hide();
jQuery('div.form-3').hide();
jQuery('div.form-4').hide();
jQuery('div.form-5').hide();
jQuery('div.form-1').show();
jQuery('div.form-6').hide();
jQuery('div.form-7').hide();
jQuery('div.form-8').hide();
break;
case '0-2':
jQuery('div.form-2').show();
jQuery('div.form-1').hide();
jQuery('div.form-3').hide();
jQuery('div.form-4').hide();
jQuery('div.form-5').hide();
jQuery('div.form-6').hide();
jQuery('div.form-7').hide();
jQuery('div.form-8').hide();
break;
case '0-3':
jQuery('div.form-1').hide();
jQuery('div.form-2').hide();
jQuery('div.form-4').hide();
jQuery('div.form-3').show();
jQuery('div.form-5').hide();
jQuery('div.form-6').hide();
jQuery('div.form-7').hide();
jQuery('div.form-8').hide();
break;
case '0-4':
jQuery('div.form-1').hide();
jQuery('div.form-2').hide();
jQuery('div.form-3').hide();
jQuery('div.form-5').hide();
jQuery('div.form-6').hide();
jQuery('div.form-4').show();
jQuery('div.form-7').hide();
jQuery('div.form-8').hide();
break;
case '0-5':
jQuery('div.form-1').hide();
jQuery('div.form-2').hide();
jQuery('div.form-3').hide();
jQuery('div.form-4').hide();
jQuery('div.form-6').hide();
jQuery('div.form-7').hide();
jQuery('div.form-5').show();
jQuery('div.form-8').hide();
break;
case '0-6':
jQuery('div.form-1').hide();
jQuery('div.form-2').hide();
jQuery('div.form-3').hide();
jQuery('div.form-4').hide();
jQuery('div.form-6').show();
jQuery('div.form-5').hide();
jQuery('div.form-7').hide();
jQuery('div.form-8').hide();
break;
case '0-7':
jQuery('div.form-1').hide();
jQuery('div.form-2').hide();
jQuery('div.form-3').hide();
jQuery('div.form-4').hide();
jQuery('div.form-7').show();
jQuery('div.form-5').hide();
jQuery('div.form-6').hide();
jQuery('div.form-8').hide();
break;
case '0-8':
default:
jQuery('div.form-1').hide();
jQuery('div.form-2').hide();
jQuery('div.form-3').hide();
jQuery('div.form-4').hide();
jQuery('div.form-5').hide();
jQuery('div.form-8').show();
jQuery('div.form-6').hide();
jQuery('div.form-7').hide();
break;
}

return false;
});
};

jQuery(document).ready(
function ()
{
init(local_conf);
}
);
}
zegarek84
pytanie bo są same przypadki 0-x, a co z przypadkami x-x, czyli np. 1-0, 2-3...

na to co widać to "normalnie"
po prostu zapisz sobie te elementy do tablicy (plus jeszcze mając referencję do tych elementów nie będziesz musiał ich od nowa wyszukiwać) i po najmniejszej linii oporu ukryj wszystkie w pierwszej kolejności a pokaż ten który masz pokazać z tej tablicy, ale mówiąc po najmniejszej linii oporu miałem na myśli byś łatwiej miał zrozumieć... skoro już wszystkie elementy są ukryte a tylko jeden jest widoczny, to możesz po inicjalizacji gdzie wsjo ukryłeś przechowujesz referencję do widocznego, potem ukrywasz ten widoczny a pokazujesz ten nowy element...

ps. dodaj tag "JavaScript" - pewnie mi rozbije ten wyraz ;p
Orgin
jestem bardzo słaby jeśli chodzi o .js, więc to co piszesz nic mi nie mówi...

pytanie bo są same przypadki 0-x, a co z przypadkami x-x, czyli np. 1-0, 2-3...

inaczej - można zamienić 0-1 na 1, 0-2 na 2 itd.

dostałem gotowy kod, ale chciałbym rozbudować go, bo mam więcej elementów do ukrycia. Jeśli byłbyś w stanie mi to napisać to bym był zobowiązany, jeśli nie masz ochoty ok peace smile.gif
SmokAnalog
Kod jest bardzo brzydki, amatorski. Powinien być przepisany na nowo tak naprawdę.

No ale jeśli chcesz go użyć, to jak słusznie zauważyłeś, pokazywany jest element 0-X. Czyli całą instrukcję switch możesz zamienić na:

[JAVASCRIPT] pobierz, plaintext
  1. var menuTypeChunks = menuType.split('-');
  2. if(menuTypeChunks.length >= 2) {
  3. jQuery('.menu > div').hide();
  4. jQuery('div.form-' + menuTypeChunks.pop()).show();
  5. }
[JAVASCRIPT] pobierz, plaintext


W linii 3. użyłem selektora .menu > div - zamień to na selektor, który zadziała u Ciebie w kodzie. Zamiast wybierać wszystkie divy do schowania, odnieś się do nich np. jako "wszystkie divy będące dziećmi XXX".
Crozin
@zegarek84: Mamy linię najmniejszego oporu, nie najmniejszą linię oporu. wink.gif
@Orgin: Masz kilka podstawowych błędów. Przede wszystkim CSS-owskie klasy traktujesz jako identyfikatory. Powinieneś wszystkim tym formularzom nadać jedną wspólną klasę oraz każdemu z osobna unikalny identyfikator:
  1. <form ... class="my-form" id="my-form-1">...</form>
  2. <form ... class="my-form" id="my-form-2">...</form>
  3. ...
  4. <form ... class="my-form" id="my-form-n">...</form>
Dzięki temu będziesz mógł wygodnie operować tak na wszystkich formularzach jak i na każdym z osobna.
[JAVASCRIPT] pobierz, plaintext
  1. (function($) {
  2. "use strict";
  3.  
  4. var $menuLinks = $("div.chamber_menu a");
  5. var $forms = $(".my-form");
  6.  
  7. $menuLinks.on("click", function(e) {
  8. e.preventDefault();
  9.  
  10. // Nie kasuj wszystkich klas, a jedynie tą, która Cię interesuje
  11. $menuLinks.removeClass("active");
  12. $(this).addClass("active");
  13.  
  14. $forms.hide();
  15. $("#my-form-" + this.name).show();
  16. });
  17. })(window.jQuery);
[JAVASCRIPT] pobierz, plaintext
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.