单击添加按钮后如何显示答案按钮
How to show answer buttons after add button has been clicked on?
我这里有一个应用程序,用户可以在其中选择他们的选项和答案。解释这个问题的最好方法是您是否使用应用程序本身,以便您可以看到正在发生的事情。请在申请中按照以下步骤操作。
- 步骤1:当您打开应用程序时,您将看到"打开网格"链接,单击它并选择选项类型,选择选项后将在底部显示答案按钮。例如,如果您选择的选项是"5",它将显示 5 个答案按钮"A - E",如果选择的选项为 8,它将显示 8 个答案按钮"A-H"。
现在这很好。但是我遇到的问题是用户是否想要添加以前的选项。请查看以下步骤:
- 步骤 2:刷新页面
- 步骤3:您将在左侧看到一个绿色的加号按钮,单击它,这将打开一个模态窗口。
- 步骤4:在搜索框中输入"AAA",然后单击"提交"按钮,它将显示数据库中的行。
- 步骤5:请点击"添加"按钮选择一行,模态窗口将关闭,如果您查看答案和选项控制在右侧,您可以看到选项类型文本框和"答案数"文本框出现,但显示"答案"按钮不显示。
所以我的问题是,如何在用户单击"添加"按钮后显示"答案"按钮?
下面是控制单击"添加"按钮后发生的情况的功能:
function addwindow(numberAnswer,gridValues) {
if(window.console) console.log();
if($(plusbutton_clicked).attr('id')=='mainPlusbutton') {
$('#mainNumberAnswerTxt').val(numberAnswer);
$('#mainGridTxt').val(gridValues);
} else {
$(plusbutton_clicked).closest('tr').find('input.numberAnswerTxtRow').val(numberAnswer);
$(plusbutton_clicked).closest('tr').find('input.gridTxtRow').val(gridValues);
}
$.modal.close();
return false;
}
下面是存储接听按钮的代码(我需要调用什么才能显示接听按钮):
<table id="optionAndAnswer" class="optionAndAnswer">
...
<?php
$a = range("A","Z");
?>
<table id="answerswerSection">
<tr>
<?php
$i = 1;
foreach($a as $key => $val){
if($i%7 == 1) echo"<tr><td>";
echo"<input type='"button'" onclick='"btnclick(this);'" value='"$val'" id='"answerswer".$val."'" name='"answerswer".$val."Name'" class='"answerswerBtns answers answerBtnsOff'">";
if($i%7 == 0) echo"</td></tr>";
$i++;
}
?>
</tr>
<tr>
<td>
<input class="answerswerBtns answers" name="answerswerTrueName" id="answerswerTrue" type="button" value="True" onclick="btnclick(this);"/>
<input class="answerswerBtns answers" name="answerswerFalseName" id="answerswerFalse" type="button" value="False" onclick="btnclick(this);"/>
<input class="answerswerBtns answers" name="answerswerYesName" id="answerswerYes" type="button" value="Yes" onclick="btnclick(this);"/>
<input class="answerswerBtns answers" name="answerswerNoName" id="answerswerNo" type="button" value="No" onclick="btnclick(this);"/>
</td>
</tr>
</table>
...
</table>
更新:
下面是从网格中选择选项后导入答案按钮的代码:
$('.gridBtns').on('click', function()
{
appendAnswers(this);
});
function appendAnswers(t){
var clickedNumber = t.value;
$(t).closest('.option').siblings('.numberAnswer').find('.answertxt').show();
$(t).closest('.option').siblings('.numberAnswer').find('.string').hide();
$(t).closest('.option').siblings('.answer').find('.answers').each(function(index) {
if (!isNaN(clickedNumber) && index < clickedNumber) {
$(t).show();
$(t).closest('.option').siblings('.numberAnswer').find('.string').hide();
// show but don't change the value
$(t).closest('.option').siblings('.numberAnswer').find('.answertxt').show();
} else {
$(t).hide();
$(t).removeClass('answerBtnsOn');
$(t).addClass('answerBtnsOff');
}
var $this = $(t);
var context = $this.parents('.optionAndAnswer');
console.log($this);
});
prevButton = clickedNumber;
$(t).closest('.option').siblings('.noofanswers').find('.string').hide();
$(t).closest('.option').siblings('.noofanswers').find('.answertxt').show();
getButtons();
};
});
function getButtons()
{
var i;
if (initClick == 0) {
for (i = 65; i <= 90; i++) { // iterate over character codes for A to Z
$("#answer" + String.fromCharCode(i)).removeClass("answerswerBtnsOn").addClass("answerswerBtnsOff");
}
initClick = 1;
}
// code above makes sure all buttons start off with class answerBtnsOff, (so all button are white).
}
编辑:"this"需要作为对象传递,请尝试编辑代码
像这样从onClick中提取函数,然后在历史记录页面触发添加按钮时像"getChoice(4);"一样调用它。
像这样重写:
function getChoice(obj){
var clickedNumber = this.value;
$(obj).closest('.option').siblings('.numberAnswer').find('.answertxt').show();
$(obj).closest('.option').siblings('.numberAnswer').find('.string').hide();
$(obj).closest('.option').siblings('.answer').find('.answers').each(function(index) {
if (!isNaN(clickedNumber) && index < clickedNumber) {
$(obj).show();
$(obj).closest('.option').siblings('.numberAnswer').find('.string').hide();
// show but don't change the value
$(obj).closest('.option').siblings('.numberAnswer').find('.answertxt').show();
} else {
$(obj).hide();
$(obj).removeClass('answerBtnsOn');
$(obj).addClass('answerBtnsOff');
}
var $this = $(obj);
var context = $this.parents('.optionAndAnswer');
console.log($this);
});
getButtons();
}
$('.gridBtns').on('click', function(){
getChoice(this);
});
只需调用与单击.gridBtns相同的函数即可。使函数作为他自己的函数,并使用属性 (this) 调用它,以便它知道要使用哪些数据。我想这就是求解器。只需再次运行该功能(也许您必须对其进行一些修改才能同时使用这两个按钮)
为了做到这一点。制作到事件侦听器,一个用于 .gridBtns,一个用于 .addBtn。
当调用 .gridBtns 或 .addBtns 时,只需在事件侦听器中运行函数,如下所示:
$('.gridBtns').on('click', function(){
appendAnswers(this);
});
并将您之前使用的函数修改为如下所示:
function appendAnswers(t){
//t = this you defined in the onclick event
//rest of your code here
}
我不太确定我是否完全理解您的问题,但我尝试了几次您的应用程序,我想我理解:从数据库加载结果 ->用结果填充字段?
无论如何,我看到您正在使用 Jquery,所以我认为您应该能够使用 .html() 或 .append() 在 for 循环中添加每个按钮:(我假设您已将答案按钮存储在数组中)。我很懒,所以我通常用一个ID来命名目标 #ButtonHolder 这是你的按钮。
var buttonhtml = ""; //I personally like to build the html then insert it.
var lastchar = gridValues.charCodeAt(gridvalues.length-1);
for (i=65;i<=lastchar;i++) // 65 is the code for "A"
buttonhtml += "<input type='"button'" onclick='"btnclick(this);'" value='""+String.fromCharCode(i)+"'" id='"answerswer"+String.fromCharCode(i)+"'" name='"answerswer"+String.fromCharCode(i)+"Name'" class='"answerswerBtns answers answerBtnsOn'">";
$("#ButtonHolder").html(buttonhtml);
你有没有想过不使用onclick,而是使用JQuery来处理类的点击?
编辑:
function addwindow(questionText,textWeight,numberAnswer,gridValues) {
if(window.console) console.log();
if($(plusbutton_clicked).attr('id')=='mainPlusbutton') {
if( gridValues != "True or False" && gridValues != "Yes or No" )
{
var myNumbers = {};
myNumbers["A-C"] = "3";
myNumbers["A-D"] = "4";
myNumbers["A-E"] = "5";
//...
myNumbers["A-Z"] = "26";
gridValues = myNumbers[gridValues];
$('#mainNumberAnswerTxt').show();
}
else{
$('#mainNumberAnswerTxt').hide();
}
$('#mainTextarea').val(questionText);
$('#mainTxtWeight').val(textWeight);
$('#mainNumberAnswerTxt').val(numberAnswer);
$('#mainGridTxt').val(gridValues);
} else {
$(plusbutton_clicked).closest('tr').find('input.numberAnswerTxtRow').val(numberAnswer);
$(plusbutton_clicked).closest('tr').find('input.gridTxtRow').val(gridValues);
var lastchar = gridValues.charCodeAt(gridValues.length-1); // getting the last charcode i.e. "A-D" -> "D" -> 68
$(".ansBtns").removeClass("answerswerBtnsOn").addClass("answerswerBtnsOff"); // reset all the buttons to off *I think this works*
// 65 is the code for "A" Iterating each choice and activating it:
for (i=65;i<=lastchar;i++)
$("#answer"+String.charCodeAt(i)).addClass("answerswerBtnsOn");
$.modal.close();
return false;
}
那么,当您单击网格中的选项时会触发什么? 如果具有所需内容属性的对象的名称是根据选项类型命名的:即"选项类型 4"是"OP4",与其让"上一个问题"查询填充字段,不如让它将返回的值存储为 var,然后只需调用在单击弹出窗口中的选项时填充答案的相同函数:
optionPicked("op" + opType);
或者不管你怎么称呼它。
- Jquery/Javascript:通过按下按钮显示数组中的随机图像
- 类似FB的按钮显示在页面上,但不会在同一页面上弹出
- 单击javascript按钮显示/隐藏Div元素
- 单击按钮显示不同的文本,重复第一个文本
- C3.js通过单击按钮显示工具提示
- 单击按钮显示重新单击消失
- 点击浏览器的“后退”按钮显示的是JSON而不是HTML(使用Rails和d3.js)
- 尝试从单选按钮显示的JSON数组中调用多个对象
- 在youtube视频中单击按钮显示图像
- 使用HTML和Javascript,使用4个单选按钮显示和隐藏输入字段
- 如何在javascript中使两个按钮显示在一起
- 如何使用按钮显示/隐藏潜水
- 使用不起作用的按钮显示和隐藏
- facebook点赞按钮显示数以万计的点赞
- 流星:点击按钮显示一些东西
- jQuery按钮显示/隐藏类,如果存在类
- 如何让我的 ckEditor 菜单按钮显示在两行而不是四行上
- 如何让我的移动菜单按钮显示和隐藏导航栏,以及在负空间中单击时隐藏
- 网格中的拆分按钮显示在行后面 - 剑道 UI
- Dijit 按钮显示图标,但不以编程方式显示标签