Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jQuery i jakby onload, read dla diva
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
expert
Mam taki kod:
Kod
$("input[type='text']").keypress(function(e) {

    })


Chodzi o oto, że chce przed keypress dac coś w stylu pe='text']").ready(function(){}).keyp lub pe='text']").load(function(){}).keyp . Jednak żadne z tych nie działa. Czy jest coś takiego jak jakby .create. Wiadomo o co chodzi?
kamil4u
Cytat
Wiadomo o co chodzi?

Nie wiadomo. Napisz jeszcze raz, opisując znacznie dokładnie.
expert
To inaczej.
Powiedzmy mam na stronie klika input, z czego dwa są typu text. Do nich odwołuje się za pomocą $("input[type='text']"). Chce je zamienić na <input type="password">, ale za pomocą attr nie można zmieniać typów elementów, które są już na stronie. Można jedynie wywalić stary element i zastąpić go nowym.

Chce skopiować też do nowego input wszystkie parametry starego np. class, id, value itp. Czyli chce zamienić type 'text' na type='password'. Dla tego myślałem, żeby zrobić to w funkcji typu load albo ready dla input.

Zobaczę, bo może each coś da sie wykombinować.
kamil4u
Cytat
ale za pomocą attr nie można zmieniać typów elementów

Nie używam z reguły jQuery, ale z tego co pamiętam to można. Nic nie stoi na przeszkodzie. A jak z jakiś niepojętych dla mnie względów się nie da to w czystym JS da się na pewno, bo nie raz to robiłem. Więc pobierz referencję do elementu( get ) i zmienić atrybut( element.setAttribute )

Pokaż jak próbowałeś z attr.
expert
Dla przykladu:
  1. $("input[type='text']").attr("type","password")


Co ciekawe w wordpress przy zmianie hasła skrypt zmienia jakoś atrybut type. Póki co zrobiłem to tak:
  1. $("input[type='text']").each(function() {
  2. var old_input = $(this);
  3. var new_input = $("<input type='password' />");
  4. for (j = 0; j < old_input[0].attributes.length; j++) {
  5. var n = old_input[0].attributes[j].name;
  6. var v = old_input[0].attributes[j].value;
  7. if(n != 'type'){
  8. new_input.attr(n,v);
  9. }
  10. }
  11. new_input.insertBefore(this);
  12. }).remove();

http://jsfiddle.net/mtYWe/
kamil4u
No i ten pierwszy kod działa. Nie wiem po co kombinujesz. http://jsfiddle.net/mtYWe/1/
expert
Cytat(kamil4u @ 11.01.2013, 15:42:04 ) *
No i ten pierwszy kod działa. Nie wiem po co kombinujesz. http://jsfiddle.net/mtYWe/1/


Hmmm... Faktycznie, to coś musiałem sknocić pisząc kod u siebie.
Pawel_W
Cytat(kamil4u @ 11.01.2013, 13:58:57 ) *
Nie używam z reguły jQuery, ale z tego co pamiętam to można. Nic nie stoi na przeszkodzie. A jak z jakiś niepojętych dla mnie względów się nie da to w czystym JS da się na pewno, bo nie raz to robiłem. Więc pobierz referencję do elementu( get ) i zmienić atrybut( element.setAttribute )

Pokaż jak próbowałeś z attr.

niektóre przeglądarki (z tego co pamiętam to np. IE bądź Chrome) nie pozwalają na zmianę typu inputa ze względów bezpieczeństwa smile.gif
expert
Jednak nie działa, kąbinuję czemu.
http://siekier.pl/test.html
kamil4u
Rzeczywiście jQuery zabrania:
Cytat
Note: jQuery prohibits changing the type attribute on an <input> or <button> element and will throw an error in all browsers. This is because the type attribute cannot be changed in Internet Explorer.


Zrób tak jak pisałem( pod IE możliwe, że się nie da zrobić ze względów bezpieczeństwa ):
Kod
$(function() {
    $("input[type='text']").each(function(i,j){
        $(this).get(0).setAttribute("type","password");
    });
});


--edit--
Cytat
kąbinuję czemu.

http://www.sjp.pl/kombinowa%E6
expert
Cytat(kamil4u @ 11.01.2013, 20:34:00 ) *
Zrób tak jak pisałem( pod IE możliwe, że się nie da zrobić ze względów bezpieczeństwa ):
Kod
$(function() {
    $("input[type='text']").each(function(i,j){
        $(this).get(0).setAttribute("type","password");
    });
});


To działa najpewniej. IE z $.attr() ma jakieś problemy, choć pod innymi przeglądarkami działa ok.

EDIT:

Wiem chyba z czego wynika różnica działania skyptu. W JsFiddle jak ustawię jQuery(edge) to działa, ale jak ustawie samo jQery np. 1.8.2 to już nie działa. Sprawdzałem po FF i IE. Czegoś mi w moim skrypcie brakuje...

EDIT:
Jest jakiś inny kod http://code.jquery.com/jquery-git.js i http://code.jquery.com/jquery.js Nie wiem na czym polega różnica.
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.