0

最初,表格只有一个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)。现在,问题是,每个克隆行都有不同的唯一 ID 用于select/picker list控制。并且此 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 回答