0

最初は、テーブルには 1 つのみtr(ラベル/ヘッダー) があり、addボタンをクリックすると、次のように新しいものが作成trされます。および他のすべての結果のクリックはadd、最後の を複製しますtr

<tr>          
   <script type="text/javascript">

       //fetch the value of select picker control and set into hidden field.
       AJS.$('#' + '${field_uid}-resourcetypepicker-new1').change(function () {
           AJS.$('#' + '${field_uid}-resourcetype-new1').val(AJS.$(this).attr('value'));
       });

       //fetch the value of select picker control and set into hidden field.
       AJS.$('#' + '${field_uid}-locationpicker-new1').change(function () {
           console.log(AJS.$(this).attr('value'));
           AJS.$('#' + '${field_uid}-location-new1').val(AJS.$(this).attr('value'));
       });  

    </script>  
<td>

     <input id="${field_uid}-resourcetype-new1" 
           name="${field_uid}" 
           type="hidden" 
           value="$r.getResourceType()" />

   <select id="${field_uid}-resourcetypepicker-new1">       
    <option value="adad"   #if ($r.getResourceType() == "adad") selected="selected"#end >adad</option>
    <option value="dada"   #if ($r.getResourceType() == "dada") selected="selected"#end >dada</option>
    <option value="aadd"   #if ($r.getResourceType() == "aadd") selected="selected"#end >aadd</option>
  </select>
  </td>

  <td>        
   <input id="${field_uid}-location-new1" 
           name="${field_uid}" 
           type="hidden" 
           value="$r.getLocation()" />

   <select id="${field_uid}-locationpicker-new1">
    <option value="Internal(Local)"   #if ($r.getLocation() == "Internal(Local)") selected="selected"#end >Internal(Local)</option>
    <option value="Contractor(Local)"   #if ($r.getLocation() == "Contractor(Local)") selected="selected"#end >Contractor(Local)</option>
    <option value="Contractor(Offshore)"   #if ($r.getLocation() == "Contractor(Offshore)") selected="selected"#end >Contractor(Offshore)</option>          
   </select>
  </td>

  <td>
    <input id="${field_uid}-rate-new1" 
           name="${field_uid}" 
           type="text" 
           value="$r.getRate()" />    <!-- $textutils.htmlEncode($r.getRate()) -->
  </td>

  <td>
    <input id="${field_uid}-effort-new1" 
           name="${field_uid}" 
           type="text" 
           value="$r.getEffort()" />
  </td>
</tr>

問題: 上記のもので、特定のコントロール ID を指す既存の JavaScript'#' + '${field_uid}-resourcetypepicker-new1'は (レンダー ID が のように見えるcustomfield-id-111-new1) ことを意味します。ここで、問題は、各クローン行がselect/picker list制御用に異なる一意の ID を持つことです。この JavaScript は、最初の行コントロールのみを としてポイントしAJS.$('customfield-id-111-new1')ます。AJS.$('customfield-id-111-new2')しかし、それは次の行にあるはずAJS.$('customfield-id-111-new3')です。

では、最初の行のコントロールのみを指すのではなく、複製された各コントロールを指すことができるjqueryの下に記述する最良の方法は何ですか? tr参照制御またはその他の方法を介して任意の方法。

 AJS.$('#' + '${field_uid}-resourcetypepicker-new1').change(function () {
           AJS.$('#' + '${field_uid}-resourcetype-  new1').val(AJS.$(this).attr('value'));
       });

また、クローンされた行には、この javascript が含まれていませんでした。クローンの後に追加する必要がありますか?

さらに詳細が必要な場合はお知らせください。

注:AJS.$は に等しい$です。JIRA のベロシティ テンプレート ファイルで使用されます。

ありがとうございました

4

1 に答える 1

0

更新された質問に照らして、次のコードを参照してください

AJS.$('[id^="${field_uid}-resourcetypepicker-"]')

このセレクターは、で始まる ID を持つアイテムを取得するために使用できる${field_uid}-resourcetypepickerため、id の最後の部分 (new1、new2 など) を気にする必要はありません。

次に、変更イベントは、ページの読み込み時に存在するすべての要素にバインドされます。ただし、要素を動的に作成すると (クローンなど)、イベントは機能しません。使用する必要があります

 AJS.$('[id^="${field_uid}-resourcetypepicker-"]').on('change', function () {
       ...
 });

これは、セレクターに一致するページ上のすべての要素に対して機能します

于 2013-07-11T09:50:10.063 に答える