我有一行代码,当单击一个网格按钮时,它会成功触发。这是新的:
$('#btn'+gridValues).trigger('click');
触发器使用以下代码:
<table id="optionAndAnswer" class="optionAndAnswer">
<tr>
<th colspan="2">
Option and Answer
</th>
</tr>
<tr class="option">
<td>1. Option Type:</td>
<td>
<div class="box">
<input type="text" name="gridValues" class="gridTxt maxRow" id="mainGridTxt" readonly="readonly" />
<span href="#" class="showGrid" id="showGridId">[Open Grid]</span>
</div>
<?php
$num = range("3","26");
?>
<table class="optionTypeTbl">
<tr>
<?php
$i = 1;
foreach($num as $key => $val){
if($i%7 == 1) echo"<tr><td>";
echo"<input type=\"button\" value=\"$val\" id=\"btn".$val."\" name=\"btn".$val."Name\" class=\"gridBtns gridBtnsOff\">";
if($i%7 == 0) echo"</td></tr>";
$i++;
}
?>
</tr>
</table>
</td>
</tr>
</table>
触发器代码的作用是让用户点击网格按钮(btn)4,然后它将显示4个答案按钮A,B,C,D。另一个例子是如果用户点击网格按钮7,它将显示7个答案按钮A,B,C,D,E,F,G。
但我在下面有另一段代码,它就像你在上面的代码中看到的选项控件的模板或副本。
function insertQuestion(form) {
var context = $('#optionAndAnswer');
var $tbody = $('#qandatbl > tbody');
var $tr = $("<tr class='optionAndAnswer' align='center'>");
var $options = $("<div class='option'>Option Type:<br/></div>");
var $questionType = '';
$('.gridTxt', context).each( function() {
var $this = $(this);
var $optionsText = $("<input type='text' class='gridTxtRow maxRow' readonly='readonly' />")
.attr('name',$this.attr('name')+"[]")
.attr('value',$this.val())
.appendTo( $options )
.after("<span href='#' class='showGrid'>[Open Grid]</span>");
$questionType = $this.val();
});
$td.append($options);
$tbody.append($tr);
}
我的问题是,如果在第一个代码中触发器是$('#btn'+gridValues).trigger('click');
,那么触发器代码应该是什么,第二个代码能够从第二个代码中选择网格按钮?
更新:
我为此应用创建了一个网址here。请按照步骤使用该应用程序,然后您可以看到发生了什么:
现在这个工作正常,但它只适用于顶部选项和答案控件,请按照以下步骤操作:
答案 0 :(得分:1)
如果您想点击价值为<span>
的{{1}}后的<input type="text" class="gridTxtRow maxRow">
点击,您可以执行以下操作:
VAL
选择器$('input.gridTxtRow[value="VAL"] + span').trigger('click');
选择A + B
元素B
的任何A
元素。
更新:在开始使用之前,您需要修复一些事项:
元素ID应该是唯一的,即整个页面中只有一个元素具有特定的ID。为新选项生成input.gridBtns
时,它会将ID(btn3
,btn4
等)作为第一个选项的按钮。浏览器允许您这样做,但使用这些ID的JavaScript将变得不可预测。
新用户的input.gridBtns
仅在用户点击[Open Grid]
时生成。如果用户在点击[Open Grid]
之前单击绿色加号按钮,则没有按钮可以打开.trigger()
。我建议您在添加新选项时添加这些按钮。
完成这些修复后,如果更改此行:
$(plusbutton_clicked).closest('tr').find('input.gridTxtRow').val(gridValues);
到此:
$(plusbutton_clicked).closest('tr')
.find('input.gridTxtRow').val(gridValues).end()
.find('input.gridBtns[value="' + gridValues + '"]').trigger('click');
它应该做你想要的。
更新#2 抱歉,我认为您在[Open Grid]
之后添加了新按钮,实际上您正在移动<table class="optionTypeTbl">
。
代替以前的$(plusbutton_clicked)...
代码,试试这个:
$(plusbutton_clicked).closest('tr')
.find('input.gridTxtRow').val(gridValues)
.parent().append($('.optionTypeTbl'));
$('#btn' + gridValues).trigger('click');
答案 1 :(得分:0)
要在页面上动态添加元素添加事件侦听器,您可以使用$(element).live(“event”,callback);
这可能不是您想要做的,但我会做以下事情:
模板中的我的按钮(由php for循环添加[VALUE]):
<a href="#" class="btn" rel="[VALUE]">[VALUE] options</a>
我的听众:
$(".btn").live("click", function(){
var numberOfAnswers = $(this).attr('rel');
// Code to show answers taken from the rel tag on the <a>
return false;
});
答案 2 :(得分:0)