0

わかりました、質問だけで頭が回転します。

関数を呼び出しているアンカー タグがあります。

<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を取得し、それを(何らかの方法で)使用して、関数がページ内の複数のフォームで機能できるようにすることでした。

簡単な console.log を使用してアイデアをテストしようとしたことがわかりますが、「未定義」が返され続けました。アンカータグ自体でconsole.logも実行してみましたが、やはり「未定義」でした。

私は .parents() をテストしましたが、アンカータグでは完全に機能しますが、関数iteslfでは機能しません。

助言がありますか?

4

5 に答える 5

2

$(this) を addparents に渡す必要があります。これにより、関数で作業するための適切なスコープが得られます。そう:

<a href="#" id="addPerson" onClick="addPerson($(this)); return false;">Add a Guest</a>

次に、関数で次を使用します。

function addPerson(anchorElement) {
    var form = anchorElement.parents("form");
    //etc.
}  
于 2010-11-22T22:15:11.697 に答える
1

this文脈は異なります。onclick を次のように変更します。

addPerson.call(this);

これにより、関数内の がアンカー タグ内のthisと一致します。this

または、onclick 属性をまったく使用せずに、次のように jQuery イベント ハンドラー アタッチメントを使用することをお勧めします。

$(document).ready(function() {
    $('#addPerson').click(function(ev) {
        ev.preventDefault();
        // Do something with $(this), which is the anchor tag
    });
});

また、アンカー タグにはクリック ハンドラがありません。

<a href="#" id="addPerson">Add a Guest</a>
于 2010-11-22T22:14:39.033 に答える
1

属性を使用しないでくださいonclick。jQuery イベント バインディングを使用します。マークアップに関する情報を提供しなかったため、自分でセレクターに入力する必要があります

//this binds the same function to all a tags specified by the selector
$("form somemoreselectorgotgettheright a").bind("click", function() {
    console.log($(this).parent("form").attr("id"));
    ....
});
于 2010-11-22T22:13:46.623 に答える
0

ID をパラメーターとして渡します。例えば

<a href="#" id="addPerson" onClick="addPerson('addPerson'); return false;">Add a Guest</a>

then...

function addPerson(parent_id) {
// do something with parent_id
于 2010-11-22T22:15:10.497 に答える
0

セレクターでparent()を使用します(これにより、一致するものが見つかるまですべての親を上方向に検索します)。例えば

$(this).parents('form').[...]
于 2010-11-22T22:14:06.410 に答える