2015-04-01 49 views
1

我有一些表示測驗創建頁面的表單,我想動態地添加這些問題的問題和答案。我想對新創建的按鈕上的點擊事件做出響應。.on()方法中的動態選擇器

問題是onClick事件僅在從頭開始存在的第一個按鈕上執行。

這裏是我的代碼示例。我有一個表格,編號爲myForm,編號爲questioni的div封裝了所有關於i的問題(也是用於添加對特定問題的答案的類new_answer的按鈕),變量curr_q(我正在創建當前問題)。

$(function() { 
    $("#myForm").on('click', "#question" + curr_q + " .new_answer", function() { 
     alert("#question" + curr_q + " .new_answer"); 
     }); 
}); 

這裏也不甘示弱 - http://jsfiddle.net/sruzic/8yt9jcqh/(這是有點勢不可擋,但問題是,當你點擊現有Create Question然後新建Create Answer按鈕沒有responing而「老」 Create Answer提醒,選擇是question1 .new_answer這正是提前新建Create Answer按鈕?

感謝。

+2

如果你有一個函數調用,'了foo(bar)',那麼所有參數進行評估之前* *它們傳遞給函數。意思是''#question「+ curr_question +」.new_answer「'被評估,產生一個字符串,例如。 ''#question0 .new_answer「',這是傳遞給'.on'的值。稍後更改'curr_question'不會影響該值。它不會「神奇地」重新評估。爲什麼不直接使用'.new_answer'作爲選擇器呢? – 2015-04-01 17:49:07

+0

我也認爲是這樣。有沒有解決我的問題的方法? – sruzic 2015-04-01 17:51:10

+1

'$(「#myForm」)。on('click',「.new_answer」,function(){...})'。 – 2015-04-01 17:51:28

回答

0

更新你的代碼這一點。檢查demo

 $(function() { 
      var selector = "#question" + curr_q + " .new_question"; 
      $(selector).click(function() { 
       curr_q++; 
       alert(curr_q); 
       total_q++; 
       $('#myForm').append(generateQuestionSubForm(total_q)) 

       $("#myForm").on('click', "#question" + curr_q + " .new_answer", function() { 
      alert("#question" + curr_q + " .new_answer"); 
       }); 

      }); 
     }); 
+0

我認爲它的工作方式就像我寫'$(「#myForm」)。on('click',「.new_answer」,function(){...})' – sruzic 2015-04-01 18:08:49

+0

@sruzic是的,這也可以。 。那麼現在有什麼問題? – 2015-04-01 18:10:01

+0

「我只想回應我正在創建的問題的事件...」 – sruzic 2015-04-01 18:43:38

0

除了更改事件偵聽器,只需在創建新項目時從先前的輸入中刪除new_answer類。像這樣的東西應該工作:

$(function() { 
      var selector = "#question" + curr_q + " .new_question"; 
      $(selector).click(function() { 
       curr_q++; 
       alert(curr_q); 
       total_q++; 
       $('.new_answer').removeClass('new_answer'); 
       $('#myForm').append(generateQuestionSubForm(total_q)) 
      }); 
     }); 
     $(function() { 
      $("#myForm").on('click', ".new_answer", function() { 
       alert("#question" + curr_q + " .new_answer"); 
      }); 
     });