2010-12-10 4 views
0

Je veux appeler une fonction à chaque fois qu'un élément de formulaire (champ caché, en particulier) avec une certaine classe charge. Ce:Puis-je/Comment lier des événements jQuery pour former un chargement d'élément lors du chargement de Rails partiels?

$('.has_other').ready(function(){ 
    alert($(this).value); 
}); 

fonctionne très bien sur la charge de la page initiale, mais quand je recharge la forme partielle qui contient l'élément avec la classe « has_other » (pour la modification d'un élément en utilisant la même forme), l'événement ne soit pas appelé à nouveau. Existe-t-il un moyen dans jQuery pour que cette fonction soit appelée sur toutes les charges du champ caché, y compris les rechargements/charges de partiels dans la page existante?

Merci d'avance!

Edit: Je rends la partie comme ça dans mon contrôleur:

page.replace_html 'secondary_publication_entry', :partial => 'publications/form' 

Edit 2: Voici un code plus spécifique:

$j('.has_other_hidden').live('ready', function(){ 
    alert($j(this).value); 
}); 

ont également essayé

$j('.has_other_hidden').ready(function(){ 
    alert($j(this).value); 
}); 

et

$j('.has_other_hidden :hidden').live('ready', function(){ 
    alert($j(this).value); 
}); 

Le seul de ceux-ci qui provoque des alertes est .ready(), qui ne pas la cause des alertes sur la charge/recharge partielle, ce qui est ce que je voudrais arriver.

Je suppose que je pourrais appeler une fonction qui appelle à nouveau ready() quand je recharge chaque partiel - je ne suis pas sûr de savoir comment faire cela (appeler une fonction jquery à partir d'un contrôleur de rails).

Merci pour les réponses!

Édition 3: J'ai essayé de vivre ('charger', ...) et de vivre ('prêt', ...). Ni le travail ici :(

+0

Je ne suis pas sûr mais avez-vous essayé de placer votre code partiel?Il devrait être appelé à chaque fois de nouvelles charges partielles – Bohdan

+0

Je ne sais pas comment appeler une fonction jQuery à partir d'un contrôleur de rails où je charge l'aide partielle? – Sarah

+0

non pas du contrôleur juste plassez votre code js à l'intérieur partiel Eh bien je n'ai jamais utilisé de prototype mais dans le cas de jquery.get vous pouvez placer votre code js dans action.js.erb alors peut-être si vous placez votre code partiel et rendre Partiel du contrôleur le code sera exécuté et les nouveaux objets (qui ont été ajoutés avec partielle) seront également mis à jour – Bohdan

Répondre

0

Ceci est un peu grossier, mais si live() ne fonctionne pas, vous pouvez annuler et rétablir toutes les liaisons manuellement. Exemple:

function bindMyStuff() { 
    $('a').unbind('click'); 
    $('a').click(funciton() { 
    alert("I've been clicked!"); 
    } 
} 

$(document).ready(function() { 
    bindMyStuff(); 
}); 

Ensuite, votre appel pourrait bindMyStuff() partielle dans les balises de script.

+0

oh man. D'abord, j'obtiens une erreur 'handler is undefined' quand je définis simplement une fonction bindMyStuff(). Et malheureusement, la fonction bindMyStuff ne fait rien lorsque j'essaie d'ajouter unbind et .load() au lieu de .click(). Appeler une fonction externe de mon partiel est probablement la direction dans laquelle je dois aller, merci pour cette idée! – Sarah

+0

ok, je pensais que je pourrais utiliser live() avec .load(), de sorte que quand un autre élément de la classe d'origine chargé (comme dans un partiel) la fonction serait appelée. – Sarah

+0

@Sarah: avez-vous essayé de délier et de relier .ready() au lieu de .load()? – Samo

2

Essayez de regarder la méthode en direct de la bibliothèque jQuery. Je pense que cela fonctionnera

$('.has_other').live('load', function(){ 
    alert($(this).value); 
}); 

Si cela ne fonctionne pas essayer de tirer l'événement après la demande ajax qui que partielle recharge. ?

+0

J'aurais dû mentionner que j'ai déjà essayé live(). Malheureusement, rien ne se passe avec cela, même lorsque la forme principale se charge au départ. – Sarah

+0

live est la solution que vous cherchez, pourriez-vous poster le code que vous recherchez avec .live? En outre, avez-vous complètement supprimé le prototype/ajouté jQuery noConflict? – sethvargo

+0

Voir ma mise à jour - Je n'ai pas eu de chance avec live() dans cette situation. Je ne pense pas que live fonctionne avec 'ready'/'load'? – Sarah

0

est-ce champ caché S'il est $ ('. has_other ') ne renvoie les champs qui sont visibles

$ (' has_other:. caché).

devrait récupère l'élément caché.