2016-09-21 6 views
1

私のタイトルがちょっと混乱していたら謝ります。私はそれを称える良い方法を考えることができませんでした。ページ上の多くのフォームの1つにある要素にIDを動的に追加する

とにかく、私はいくつかのjQueryのヘルプを探しています。

私は3つのフォームを持つページを持っています。各フォームのすべてのフォームフィールドには値があらかじめ入力されており、デフォルトでは無効になっています。

各フォームには「編集」リンクがあり(すべて同じクラスが割り当てられています)、クリックすると無効なプロパティが削除され、保存およびキャンセルボタンが表示され、最初の入力フィールドにフォーカスが移ります。私が必要とするすべてのIDをハードコードするとき、私はこれを自分で達成することができます。しかし、それは本当に私の状況のた​​めに働くつもりはありません。

各フォーム間の唯一の一意の識別子は、フォームタグのIDです。

私がやっていることは、ページが読み込まれたときに、編集リンクにIDを追加し、編集リンクのIDを新しく作成したIDにフォームIDを追加することです。私は動的に明示的にHTMLで設定しなくても、各編集リンクにIDを追加しているよ

<form id="form-1"> 
    <a class="edit">Edit</a> 
    ... 
</form> 
<form id="form-2"> 
    <a class="edit">Edit</a> 
    ... 
</form> 
<form id="form-3"> 
    <a class="edit">Edit</a> 
    ... 
</form> 

は、ここに私が働いているかを示すために、非常に基本的なコード例です。私は、フォームのIDである[フォームID]と、 "編集 - [フォームID]"のIDを追加したいと思います。私は、フォームは次のようになりたいページが読み込まれた後にそう

:ここ

<form id="form-1"> 
    <a class="edit" id="edit-form-1">Edit</a> 
    ... 
</form> 
<form id="form-2"> 
    <a class="edit" id="edit-form-2">Edit</a> 
    ... 
</form> 
<form id="form-3"> 
    <a class="edit" id="edit-form-3">Edit</a> 
    ... 
</form> 

は、私がこれまで試してみましたものですが、それは正常に動作させることはできません。

$(document).ready(function(){ 
    $("form").each(function(index) { 
      var formID = $("form").attr("id"); 
      $(".edit").attr("id", "edit-" + formID); 
     }); 
}); 

残念ながら、すべてのフォーム編集リンクにid="edit-form-1"が追加されています。

私はこれと似たようなことをする必要がある他の要素もありますが、1つの動作例が残りの部分を助けるはずです。

ご協力いただきますようお願い申し上げます。

+1

実際の質問は、なぜこれらのIDが必要なのですか?イベントハンドラが必要な場合は、クリックされたボタンに関連する各フォームにアクセスするために '$(this).closest( 'form')'を実行するだけでIDの必要はありませんか? – adeneo

+0

あなたが知っている、あなたは正しいかもしれません。クリックイベントのセレクタとして使用するために、特定のものにIDを追加したいと思っていました。私はJSにはあまり経験がありませんでしたので、おそらくこれに最も近づいていないかもしれませんが、私はタイトなスケジュールで仕事をしています。セレクタを使用していない場合は、jQueryのサイトの例に示されています。 –

答えて

0

使用this.id$(".edit", this)が、私はそれはあなたがそれらのIDを追加する必要が少し奇妙だということを認めなければならない$(this).find(".edit")

と同等ですthis

$("form").each(function() { 
    $(".edit", this).attr("id", "edit-" + this.id); 
}); 

.edit子...あなたは常に行うことができます次のようなもの:

$(".edit").on("click", function() { 

    var $myForm = $(this).closest("form"); 
    // Do something with $myForm 

}); 

Aに保存するときしかし、私はそれが仕事を得ることができませんでした

$(".edit).on("click", function() { 
    $(this).closest("form").find(".disabled").removeProp("disabled"); 
}); 

:D

+0

Hey Roko、 お勧めのスクリプトを使用していただきありがとうございます。 $ myFormでは、どのように特定のクラスをターゲットにするのですか? たとえば、デフォルトでdisabledプロパティを使用して無効にされているフォームフィールドがあります。無効なクラスを削除してから、無効なプロパティを削除してください。 このように何かを組み込む必要があります: $( "。disabled")removeProp( "disabled"); –

+0

@JonathanRyanPattersonは単に '$ myForm.find("。disabled ")に似ています。 –

0

だからロコの答えのオフに基づいて、私はこれを行うことによって、私が探していたものを達成することができました変数$ myFormを使用して変数を作成します。しかし、私はおそらくそれを正しく使用していませんでした。

もう一度あなたの男の助けをありがとう!

関連する問題