我的要求是创建等于json数组计数的按钮数。我成功地在jquery中动态创建按钮。但是没有为点击操作调用jquery的.ready函数中的方法。我试过在SO搜索。找到了一些解决方案,但对我来说没有任我对jquery很新。请帮忙......
我的代码: jQuery的:
$(document).ready(function()
{
currentQuestionNo = 0;
var questionsArray;
$.getJSON('http://localhost/Sample/JsonCreation.php', function(data)
{
questionsArray = data;
variable = 1;
//CREATE QUESTION BUTTONS DYNAMICALLY ** NOT WORKING
for (var question in questionsArray)
{
var button = $("<input>").attr("type", "button").attr("id", "questionButton").val(variable);
$('body').append(button);
//Tried using .next here - but it dint work...
//$('body').append('<button id="questionButton">' + variable + '</button>');
variable++;
}
displayQuestionJS(questionsArray[currentQuestionNo], document);
});
$("button").click(function()
{
if ($(this).attr('id') == "nextQuestion")
{
currentQuestionNo = ++currentQuestionNo;
}
else if ($(this).attr('id') == "previousQuestion")
{
currentQuestionNo = --currentQuestionNo;
}
displayQuestionJS(questionsArray[currentQuestionNo], document);
});
function displayQuestionJS(currentQuestion, document)
{
document.getElementById('questionNumber').innerText = currentQuestion.questionNumber;
document.getElementById('questionDescription').innerText = currentQuestion.quesDesc;
$('label[for=optionA]').html(currentQuestion.optionA);
$('label[for=optionB]').html(currentQuestion.optionB);
$('label[for=optionC]').html(currentQuestion.optionC);
}
HTML content
<form method="post" name="formRadio">
<label id="questionNumber"></label>.
<label id="questionDescription"></label> <br />
<input type="radio" id="optionA"> </input> <label for="optionA"></label> <br />
<input type="radio" id="optionB"> </input> <label for="optionB"></label> <br />
<input type="radio" id="optionC"> </input> <label for="optionC"></label> <br />
<button id="previousQuestion">Previous Question</button>
<button id="nextQuestion">Next Question</button>
<br />
<br />
<input type="submit" id="submitButton" name="submitTest" value="Submit"></input>
</form>
编辑 - 示例.on方法代码 - 单独的文件:工作 - 感谢很多
<script>
$(document).ready(function()
{
$("button").click(function()
{
var button = '<input type="button" id="button2" value="dynamic button">';
$('body').append(button);
});
});
$(document).on('click','#button2', function()
{
alert("Dynamic button action");
});
</script>
</head>
<body>
<button id="button">Static Button</button>
</body>
答案 0 :(得分:145)
您动态创建按钮,因为如果使用jquery 1.7,则需要使用.live()
方法调用它们
但不推荐使用此方法(您可以在较新版本中看到所有已弃用的方法here的列表)。如果你想使用jquery 1.10或更高版本,你需要以这种方式调用你的按钮:
$(document).on('click', 'selector', function(){
// Your Code
});
例如
如果您的HTML是这样的
<div id="btn-list">
<div class="btn12">MyButton</div>
</div>
你可以像这样编写你的jquery
$(document).on('click', '#btn-list .btn12', function(){
// Your Code
});
答案 1 :(得分:5)
我的猜测是,在您绑定按钮时,您创建的按钮尚未出现在页面上。绑定$.getJSON
函数中的每个按钮,或使用动态绑定方法,如:
$('body').on('click', 'button', function() {
...
});
请注意,您可能不想在&#39;身体上做这件事。标记,而是将按钮包装在另一个div或其他内容中,并在其上调用on
。
答案 2 :(得分:2)
这样做的简单方法就是使用事件:
$('body').on('click','#element',function(){
//somthing
});
但我们可以说这不是最好的方法。我建议另一种方法是使用clone()方法而不是使用动态html。 在你的文件中写一些html,例如:
<div id='div1'></div>
现在在脚本标签中复制了这个div,然后这个div的所有属性也将跟随新元素。例如:
var dynamicDiv = jQuery('#div1').clone(true);
现在使用元素dynamicDiv来添加它或根据需要更改其属性。现在所有的jQuery函数都可以使用这个元素
答案 3 :(得分:0)
您也可以这样创建输入按钮:
var button = '<input type="button" id="questionButton" value='+variable+'> <br />';
可能是按钮创建的语法以某种方式关闭。