我有一个PHP代码,它显示来自A-Z的按钮:
<table id="optionAndAnswer" class="optionAndAnswer">
<tr class="answer">
<td>3. Answer</td>
<td>
<?php
$a = range("A","Z");
?>
<table id="answerSection">
<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=\"answer".$val."\" name=\"answer".$val."Name\" class=\"answerBtns answers answerBtnsOff\">";
if($i%7 == 0) echo"</td></tr>";
$i++;
}
?>
...
我要做的是在jquery中为上面的代码创建一个模板,这样如果用户想要将这些按钮添加到一个块中,那么可以使用jquery在块中添加这些按钮,就像模板一样
下面是jquery代码:
var $this, i=0, $row, $cell;
$('#optionAndAnswer .answers').each(function() {
$this = $(this);
if(i%7 == 0) {
$row = $("<tr/>").appendTo($answer);
$cell = $("<td/>").appendTo($row);
}
var $newBtn = $("<input class='answerBtnsRow answers' type='button' style='display:%s;' onclick='btnclick(this);' />".replace('%s',$this.is(':visible')?'inline-block':'none')).attr('name', $this.attr('name')).attr('value', $this.val()).attr('class', $this.attr('class')).attr('id', $this.attr('id')+'Row');
$newBtn.appendTo($cell);
i++;
});
现在这个工作正常,但我有一个问题。我希望用户能够突出显示"answerBtnsOn"
并取消根据字母的大小取消“answerBtnsOff”按钮。
E.g如果字母为“B”,则突出显示按钮B并取消突出显示其他按钮。如果有多个字母,例如A C,则突出显示按钮A和C,然后取消所有其他按钮的高亮显示。
我遇到的问题是它突出显示应突出显示的按钮,但它不会突出显示其他按钮。因此,如果按钮B被突出显示但现在字母是A和C,则它应该只突出显示按钮A和C,并且所有其他按钮应该不突出显示但是这不会发生,因为按钮B仍然与A和C一起突出显示。
所以我的问题是,在下面的代码中,为什么不突出显示按钮?
var answersrow = $.map(btn.split(''),function(chr){ return "#answer"+chr+"Row"; }).join(', ');
$('.answerBtnsRow').removeClass('answerBtnsOff').removeClass('answerBtnsOn');
$(answersrow).addClass("answerBtnsOn").siblings().addClass('answerBtnsOff');
更新:
我已在此application中创建了一个演示版。请打开网址并按照以下步骤操作,以便能够使用演示
现在这很好,但问题现在出现了:
这就是我的问题,在这个例子中为什么按钮“B”没有关闭,因为它现在不是答案?
答案 0 :(得分:1)
首先,据我所知,$('.answerBtnsRow')
不存在。所以这就是为什么这不起作用。另外,假设选择器确实存在,然后a)它将对所有行执行此操作,而不仅仅是特定的给定行,并且b)您应该执行以下操作之一:
//to remove all of either answerBtnsOff, answerBtnsOn -- probably not what you want
$('.answerBtnsOff, .answerBtnsOn').removeClass('answerBtnsOff answerBtnsOn');
//to remove the ones from _this answer row_ which appears what you want
$(answersrow + ' .answerBtnsOn').removeClass('answerBtnsOn');
总而言之,你应该替换:
var answersrow = $.map(btn.split(''),function(chr){ return "#answer"+chr+"Row"; }).join(', ');
$('.answerBtnsRow').removeClass('answerBtnsOff').removeClass('answerBtnsOn');
$(answersrow).addClass("answerBtnsOn").siblings().addClass('answerBtnsOff');
使用:
var answersrow = $.map(btn.split(''),function(chr){ return "#answer"+chr+"Row"; }).join(', ');
$(answersrow + ' .answerBtnsOn').removeClass('answerBtnsOn');
$(answersrow).addClass("answerBtnsOn").siblings().addClass('answerBtnsOff');