2009-04-01 12 views
3

この時点まで、私はJavaScriptをあまり使っていません。私は最近jQueryで遊んで始め、フォーム上でEdit in Placeを実行する方法に関するチュートリアルを見つけました。jQuery/javascriptオブジェクトの受け渡し

関数内でコンテナdivのIDをハードコードすると、結果のコードは完全に機能しますが、関数に渡されたIDに対して一般化する問題があります。

コードは次のように起動します:

$(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')); 
} 

私は問題を抱えている部分がsaveChanges機能のsetClickable内部への最後の呼び出しです。 $('#editInPlace')の値をハードコードすると正常に動作します。しかし、私は

function saveChanges(target, obj, cancel) 

に関数のシグネチャを変更し、setClickable方法からターゲットオブジェクトに渡す場合:

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

setClickable(target); 
を呼び出す

が動作していないよう とI理由を理解できません。

+1

Jeditableプラグインhttp://www.appelsiini.net/projects/jeditableまたは編集可能なプラグインhttp://arashkarimzadeh.com/index.php/jquery/7-editable-jqueryを参照してください。 -plugin.html。 – tvanfosson

答えて

6

変更:

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

へ:

function setClickable(target) 
{ 
    target.click 
    (

あなたは(また、jQueryオブジェクトと呼ばれる)ラップセットに渡し、その後、別のラップセットでそれを包みました。上記はそれを修正します。これを行う別の方法は次のとおりです。

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

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

私は何を得ているのですか?

1

いつでもsetClickable($(target));を使用して試すことができます。 jQueryオブジェクトがあることを確認してください。

関連する問題