2012-10-15 39 views
1

我有一個表動態生成具有多個輸入,需要唯一的ID和名稱的行。我已經寫在jQuery的驗證來處理這個submitHandler功能,但我遇到了兩個問題:更改jQuery驗證程序的提交處理程序的表輸入的名稱和ID

  1. 我的表中有一個標題行jQuery是包括迭代
  2. 我所有的輸入類型正在被分配在每個循環中,而不是每行的輸入類型。

這裏是我的代碼:

var accessorylist = document.getElementById("accessorybody"); 
      var i = 1; 
      $("tr").each(function(){ 
       var e = this; 
       $('select').attr({ 
        'id': 'accessory' + i, 
        'name': 'accessory' + i 
       }); 
       $('input[type=checkbox]').attr({ 
        'id': 'accessoryrequired' + i, 
        'name': 'accessoryrequired' + i 
       }); 
       $('input[type=text]').attr({ 
        'id':'accessoryqty' + i, 
        'name': 'accessoryqty' + i 
       }); 
       alert(e); 
       i++; 
       alert(i); 
      }); 
      alert(accessorylist); 
      return false; 

對我來說,警報和返回false只是調試行。我非常肯定要回答第二個問題,我需要將輸入的重點放在行(e)上,但是我嘗試了一些不起作用的東西,而且我有點難過。至於標題行,它包裹在一個標籤中; 'accessorybody'是一個包含我的數據行的tbody標記,所以我不知道它是如何或爲什麼被包含在我的循環中。

回答

1

您可以通過檢查tr的內容,例如,跳過你的頭排迭代:

if (!$(this).has('th').length) { 
    // run code 
} 

,或者你可以改變循環,這樣它只會在環行不包含<th>小號

$('tr:not(:has(th))').each(function() { 
    // run code 
}); 

在回答你的第二個問題,你只需要給你選擇一個背景:

$('select', this); 

這樣,只有當前行中的元素都將受到影響。

+0

感謝您的幫助。這些都做到了。 –

0
  1. 使用個標籤,或者給標題行一個id,那麼可以跳過它,或者只是跳過第一行...

  2. 使用.children()功能,而不是全球性選擇。

例如:this.children( '選擇')ATTR(...

+0

我正在使用th標籤。 –

1

1)使用:not:first jQuery選擇跳過第一行

$("tr:not(:first)").each(function(){ ... }); 

2)使用this作爲jQuery對象使用行($this)作爲上下文找到你的輸入元件

var $this = $(this); 
... 
$this.find('select').attr({ ... }) 
$this.find('input[type=checkbox]').attr({ ... }) 
$this.find('input[type=text]').attr({ ... }) 
... 
+0

billyonecan可以在幾分鐘內擊敗你,但我檢查了這一點,它也可以工作。謝謝你的幫助。 –

相關問題