2009-04-01 8 views
3

Jusqu'à présent, je n'ai pas beaucoup fait en javascript. J'ai récemment commencé à jouer avec jQuery et suis tombé sur un tutoriel sur la façon de faire Edit in Place sur un formulaire. Le code résultant fonctionne parfaitement si vous codez en dur l'identifiant de votre conteneur div dans la fonction, mais j'ai des problèmes pour le généraliser pour un identifiant passé à la fonction.Objet jQuery/javascript passant

Le code commence comme ceci:

$(document).ready(function() { 
    setClickable($('#editInPlace')); 
}); 

function setClickable(target) 
{ 
    $(target).click 
    (
     function() 
     { 
      //Do some dom manipulation 

      $('.buttonA').click(function() { saveChanges(this, false); }); 
      $('.buttonB').click(function() { saveChanges(this, true); }); 
     } 
    ) 

    .mouseover(function() { $(this).addClass("editable"); }) 
    .mouseout(function() { $(this).removeClass("editable"); }); 
}; //end of function setClickable 

function saveChanges(obj, cancel) 
{ 
    //Handle the save changes code 

    //Reset the div 
    $(obj).parent().after('<div id="editInPlace">' + t + '</div>').remove(); 

    //Call setClickable 
    setClickable($('#editInPlace')); 
} 

La partie que je vais avoir des problèmes avec est le dernier appel à setClickable l'intérieur de la fonction saveChanges. Si je code en dur la valeur de $('#editInPlace'), cela fonctionne très bien. Cependant, si je change la signature de fonction

function saveChanges(target, obj, cancel) 

et passe dans l'objet cible de la méthode setClickable:

$('.buttonB').click(function() { saveChanges(target, this, true); }); 

appelant

setClickable(target); 

ne semble pas fonctionner et je Je n'arrive pas à comprendre pourquoi.

+1

Vous pouvez regarder le plugin Jeditable, http://www.appelsiini.net/projects/jeditable ou le plugin modifiable, http://arashkarimzadeh.com/index.php/jquery/7-editable-jquery -plugin.html. – tvanfosson

Répondre

6

Change:

function setClickable(target) 
{ 
    $(target).click 
    (

à:

function setClickable(target) 
{ 
    target.click 
    (

vous passez dans un ensemble enveloppé (également appelé un objet jQuery) et puis enveloppé dans un autre ensemble enveloppé. Ce qui précède corrige cela. La façon alternative de le faire est:

$(document).ready(function() { 
    setClickable('editInPlace'); 
}); 

function setClickable(id) 
{ 
    $("#" + id).click 
    (

Vous voyez ce que je veux dire?

1

Vous pouvez toujours essayer d'utiliser setClickable ($ (cible)); pour vous assurer que vous avez un objet jQuery.

Questions connexes