質問だけで、私の頭が回転しています。関数は、最初に関数を呼び出したアンカーの親要素をどのように見つけることができますか?
私は関数を呼び出しているアンカータグを持っている:
<a href="#" id="addPerson" onClick="addPerson(); return false;">Add a Guest</a>
ただ、参考のために、これが呼び出されています関数です:
function addPerson() {
//current keeps track of how many rows we have.
current++;
console.log($(this).parent('form').attr('id'));
var strToAdd = '<div class="row">\
<div class="column grid_2">\
<label for="two-guests-name'+current+'">Guest '+current+':</label>\
</div>\
<div class="column grid_5">\
<input name="two-guests-name'+current+'" type="text" id="two-guests-name'+current+'" value="Name" onfocus="RemoveFormatString(this, \'Name\')" /> \
<input name="two-guests-age'+current+'" type="text" class="guestage digits" id="two-guests-age'+current+'" value="Age" size="4" maxlength="3" onfocus="RemoveFormatString(this, \'Age\')" />\
</div>\
</div>'
$('#numberguests').append(strToAdd)
};
私は、この関数がすることができますしたいのですが1つのページで複数のフォームを処理するだから私の考えは、親フォーム要素にツリー内を戻り、そのIDを取得し、その機能をページ内の複数のフォームで機能させるために使用していました。
あなたは私のアイデアをテストするためにquick console.logを使ってみましたが、 "未定義"に戻ってきました。私はアンカータグ自体でconsole.logを実行しようとしましたが、それも "Undefined"でした。
私は、.parents()をテストしましたが、アンカータグでは完全に動作しますが、関数iteslfでは動作しません。
提案がありますか?
コンテキストを '.call(this)'で直接バインドできるときに、なぜ引数として '$(this)'を渡すのですか? –
いずれにしても、あなたのやり方はおそらくよりエレガントです。しかし、ある段階では、parent()などを使うためにjqueryオブジェクトとして "this"を$()で囲む必要があります。理想的には、jsのイベントをバインドし、htmlのonclickを使用しないでください。 – mmurch