[英]How to create dynamic event in a dynamic controller
我正在創建問題時進行小型調查,我有問題文本和問題選擇。
默認情況下,如果我要添加另一個文本框,我要填充三個文本框,我單擊添加按鈕,或者在最后一個文本框中單擊以在他下添加另一個文本框,但是該事件卡在同一文本框中,我只希望最后一個文本框來處理事件,但我不知道想要的代碼是錯誤的:
jQuery的:
<script>
$(document).ready(function () {
$('.dropdown_selector').change(function () {
var option = $(this).find('option:selected').val();
if (option == "Radio Button") {
$(".QuestionOption").html('<p>Q1:<input id="Text1" type="text" /></p> <p> Answer Choices:</p> <p><input id="Text2" type="text" /></p><p><input id="Text3" type="text" /></p> <p class ="last4"><input id="Text4" type="text" /></p>');
$(".ButtonField").html('<p><input id="Button1" type="button" value="Save" /> <input id="Button2" type="button" value="Cancel" /></p><p><input id="Checkbox1" type="checkbox" />Add a Common Field</p>');
}
else
if (option == "Check Box") {
$(".QuestionOption").html('<p>Q1:<input id="Text1" type="text" /></p> <p> Answer Choices:</p> <p><input id="Text2" type="text" /></p><p><input id="Text3" type="text" /></p> <p class ="last4"><input id="Text4" type="text" /></p>');
$(".ButtonField").html('<p><input id="Button1" type="button" value="Save" /> <input id="Button2" type="button" value="Cancel" /></p><p><input id="Checkbox1" type="checkbox" />Add a Common Field</p>');
}
});
});
</script>
<script>
$(document).ready(function () {
var counter = 5;
var nb = counter - 1;
$(".QuestionOption").on("click", "p.last"+nb, function () {
if (counter > 10) {
alert("Only 10 textboxes allow");
return false;
}
var newTextBoxDiv = $(document.createElement('p')).attr("class", 'last' + counter);
newTextBoxDiv.after().html('<input type="text" id="Text' + counter + '" value="" > ');
newTextBoxDiv.appendTo(".QuestionOption");
counter++;
nb = counter - 1;
});
$("#addButton").click(function () {
if (counter > 10) {
alert("Only 10 textboxes allow");
return false;
}
var newTextBoxDiv = $(document.createElement('p')).attr("class", 'last' + counter);
newTextBoxDiv.after().html('<input type="text" id="Text' + counter + '" value="" > ');
newTextBoxDiv.appendTo(".QuestionOption");
counter++;
});
$("#removeButton").click(function () {
if (counter == 3) {
alert("No more textbox to remove");
return false;
}
counter--;
$(".last" + counter).remove();
$("#Text"+counter).remove();
});
});
HTML代碼:
<asp:DropDownList ID="dropdown_selector" runat="server" CssClass="dropdown_selector">
<asp:ListItem>Radio Button</asp:ListItem>
<asp:ListItem>Check Box</asp:ListItem>
</asp:DropDownList>
<input id="addButton" type="button" value="Add" />
<input id="removeButton" type="button" value="Remove" />
<div id="QuestionOption" runat="server" class="QuestionOption" ></div>
<div id="ButtonField" runat="server" class="ButtonField" ></div>
$(".QuestionOption").on
在頁面加載時僅運行一次。 它將在啟動時使用p.last"+nb
值(根據其外觀為4)將偵聽器添加到與p.last"+nb
匹配的元素上。該事件永遠不會附加到任何隨后創建的元素,因為它們不匹配p.last4
。您需要在創建每個文本框時p.last4
將其打開,而對於剛剛單擊的文本框則將其關閉。
var counter = 5; //moved these outside document.ready
var nb = counter - 1;
$(document).ready(function () {
$(".QuestionOption").on("click", "p.last"+nb, newTextBox); //run newTextBox function when this is triggered
//...
}); //end of document.ready function
//re-usable function to create new textbox
function newTextBox()
{
if (counter > 10) {
alert("Only 10 textboxes allowed"); //N.B. corrected grammar from "allow" to "allowed"
return false;
}
var newTextBoxDiv = $("<p/>").attr("class", 'last' + counter);
newTextBoxDiv.after().html('<input type="text" id="Text' + counter + '" value="" > ');
newTextBoxDiv.appendTo(".QuestionOption");
$(".QuestionOption").off("click", "p.last"+nb, newTextBox); //remove event handler for the current textbox (which has just been clicked)
counter++; //increment the counter
nb = counter - 1;
$(".QuestionOption").on("click", "p.last"+nb, newTextBox); //run newTextBox function for the newly added textbox
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.