我的代码旨在用动态代码取代单选按钮,并允许单击标签和新动态单选按钮以切换隐藏状态与CSS单选框。
我需要向questions.checkAnswer()
三个参数发送,这些参数在这些启动循环中定义。但是,一旦循环完成迭代,我总是得到最后的值。在过去,我创建了虚拟元素和其他不适合存储“临时”贵重物品的东西,以充当Javascript的信息钩子。
这是我到目前为止所拥有的
init: function() {
// set up handlers
moduleIndex = $('input[name=module]').val();
$('#questions-form ul').each(function() {
questionIndex = $('fieldset').index($(this).parents('fieldset'));
$('li', this).each(function() {
answerIndex = $('li', $(this).parent()).index(this);
prettyRadio = $('<span class="pretty-radio">' + (answerIndex + 1) + '</span>');
radio = $('input[type=radio]', this);
radio.after(prettyRadio);
$(radio).bind('change', function() {
$('.pretty-radio', $(this).parent().parent()).removeClass('selected');
$(this).next('.pretty-radio').addClass('selected');
questions.checkAnswer(moduleIndex, questionIndex, answerIndex);
});
prettyRadio.bind('click', function() {
$('.pretty-radio', $(this).parent().parent()).removeClass('selected');
$(this).addClass('selected').prev('input').attr({checked: true});
});
$('label', this).bind('click', function() {
$(radio).trigger('change');
questions.checkAnswer(moduleIndex, questionIndex, answerIndex);
$(this).prev('input').attr({checked: true});
});
});
});
<li module="1" question="0" answer="6">
谢谢大家的时间。
答案 0 :(得分:2)
添加自定义属性不是世界末日。事实上,在许多情况下,这是最不好的方法。但是,如果我必须这样做,我会在属性前添加“data-”,以便它符合HTML5 specs for custom attributes的前向兼容性。这样,当您想要符合HTML5标准时,您不必担心升级。
答案 1 :(得分:1)
你需要说'var questionIndex'等,否则你的'变量'是窗口的属性并具有全局范围......
关于自定义属性,我在过去确实做到了这一点,如果可以,我会尽量避免它。如果你使用像textareas和输入标签这样的交互式元素来执行此操作,某些CMS和主题系统偶尔会感到不快,并且可能会将它们剥离出来。
最后$(a,b)与$(b).find(a)相同..有些人更喜欢第二种形式,因为它更清楚你正在做什么。
答案 2 :(得分:1)
如果自定义属性的分配完全是客户端的,则必须使用jQuery数据解决此问题,如下所示:
$(“#yourLiID”)。data({module:1,question:0,answer:6});
有关完整文档,请参阅here