2011-12-23 70 views
1

在我的應用程序的頂部,用戶可以選擇他們的選項和答案,然後他們可以將他們的選項和答案存儲在新的表格行中。如何在這種情況下使用.on()函數

我的問題是如何使每行都執行與上述選項和答案功能相同的功能,以便如果用戶在更改特定行中的選項或答案時改變主意,則可以更改它在行內。

我的密碼是JSFiddle。如果您想要使用小提琴中的選項和答案功能,請按照以下步驟操作。

  1. 打開網格並選擇選項「3」。文本框中顯示「3」,按鈕A至C顯示在下方。

  2. 在Number of Answers文本框中輸入數字2。這意味着只有2個按鈕可以在按鈕A到C之間選擇。

  3. 選擇按鈕A和B,如果您嘗試選擇另一個按鈕,則會出現警告,指出您已超出限制。

  4. 點擊「添加問題」按鈕,將創建一行顯示您的詳細信息。

我希望每列中的所有功能與頂部的選項和答案功能相匹配。我知道我需要使用.on()函數,但是我怎樣才能在每行中包含這個?

回答

0

如果我理解正確的話,你想知道如何重用在考慮到表中的行步「3」中的「警報」 ..

那麼你是正確的 - 「上」是你想要的功能。 (此功能棄用live function) 「on」所做的是重新評估每個事件的選擇器。

而是在

<input class="answerBtns" name="answerAName" id="answerA" type="button" value="A" onclick="btnclick(this);"/> 

分配「的onclick」事件你應該寫下面

$(".answerBtns").on("click",btnclick); 

這將有效地結合了「btnclick」方法上的每一個「.answerBtns」元素此頁面已經或將要有(現在和將來) - 因爲選擇器$(「。answerBtns」)將在每次點擊時重新評估。

現在剩下的就是概括「btnclick」函數來支持所有場景。這意味着它必須確定它是連續的還是在形式中並且行爲恰當。

例如(不加制止,但不是僞代碼):

<script> 
    function btnclick(){ 
     if ($(this).closest("#qandatbl").length > 0) { // we are in the table because we are wrapped in a table 
      var myRow = $(this).closest("tr"); 
      var ourLimit = myRow.find(".numberAnswerTxtRow").val(); 
      if (myRow.find(".answerBtnsOn").length > ourLimit){ 
       alert("...");... 
      } 
     }else{...} // we are not in a table.. lets do what we always did. 
    } 
</script> 

正如你所看到的,我用closestfind,因爲他們給我相同的功能,但只是相對於點擊原點。

讓我知道如果我錯過了一些東西,我會添加它。