2010-07-30 5 views
2

J'ajoute dynamiquement input éléments à un table avec le id de inputDataElements.Comment capturer des événements mouseover sur des éléments HTML d'entrée ajoutés dynamiquement à l'aide de jQuery?

Ces éléments ont input le nom deleteAction:

function renderInputDataRows(inputData) {                                                             
    var rows = "";                                                                   
    for (var i = 0; i < inputData.length; i++) {                                                           
     rows += '<tr>' +                                                                
      // ... 
      '<td class="rowActions">' + \ 
      '<input type="image" ' + \ 
      '  style="position:relative; ' + \ 
      '    bottom:-2px; ' + \ 
      '     left:-4px; ' + \ 
      '  padding-right:2px;" ' + \ 
      '  src="images/delete.png" ' + \ 
      ' onClick="deleteInputDataRow(' + inputData[i].index + ');"' + \ 
      '  name="deleteAction" ' + \ 
      '  value="deleteInputDataRow' + inputData[i].index + '"' + \ 
      '  size="18,18" ' + \ 
      ' border="0" />' + \ 
      '</td>' + 
      // ...                                                            
      '</tr>';                                                                 
    }                                                                      
    return rows;                                                                   
}  

Question: Je voudrais saisir mouseover événements sur les deleteActioninput éléments Baptisée.

J'ai le script jQuery suivant:

$(document).ready(function() { 
    inputDataElementsRowDeleteActions = $("#inputDataElements input:[name=deleteAction]"); 
    ... 
    inputDataElementsRowDeleteActions.mouseover(function(event) { 
     alert(event); 
    }); 
}); 

Problème: Je ne comprends pas le message alert quand je mouseOver l'élément input.

Existe-t-il un moyen de capturer l'événement mouseover avec jQuery, lorsque les éléments sont ajoutés dynamiquement?

Répondre

4

La façon la plus simple est d'utiliser .live()

inputDataElementsRowActions.live('mouseover', function(event) { 
    alert(event); 
}); 

ou vous pouvez utiliser .delegate() qui est similaire (et probablement préféré dans ce cas). Ils fonctionnent tous les deux en capturant l'événement qui fait une bulle. .live() le capture à la racine, tandis que .delegate() le capture au #inputDataElements dans ce cas.

Sinon, vous devez lier l'événement (ou après), vous créez les éléments.

+0

Merci, fonctionne parfaitement. –

+0

Quand le délégué n'est-il pas préféré? – redsquare

+0

@redsquare - Je suppose que si vous n'avez aucun moyen de savoir dans quelle partie du DOM les éléments seront ajoutés. Ce serait un cas rare j'imagine. '.live()' est surutilisé à mon avis. – user113716

Questions connexes