'我正在尝试执行类似下面的操作,只有当父“box”ID正确时,才会在单击“匹配”类时运行函数。
var selected = 1;
$('#box-' + selected + ' .hit').click(function(){
selected = randomFromTo(1,5);
});
selected
变量根据页面上的其他操作而变化,但我无法在任何更改后使该函数工作 - 它保持固定为最初选择的“box”id。我可以想象为什么会这样,因为jQuery已经拍摄了该字符串的快照,没有任何东西告诉它更新它但我无法弄清楚如何解决这个问题。
编辑:添加了所选变量的实例化以及设置的位置。我遗漏了UI更改,这会让用户更容易理解。
答案 0 :(得分:3)
您可以在.hit
类上设置单击处理程序,然后在处理程序本身中检查父节点中是否有正确的ID。如果这样做,请确保正确推迟事件,否则最终会为每个.hit
元素设置一个处理程序。
答案 1 :(得分:2)
如果我正确理解您的问题,问题是在创建函数时评估selected
变量。该函数当时绑定到一组DOM元素的click
事件。
绑定后,无法修改选择器,更改选择期间使用的任何变量都无效。
我能想到的最好方法是将click事件附加到所有可能的匹配项,然后在click
处理程序中进一步过滤它们......
$('.hit').click(function(){
// check if the parent has the correct id
if($(this).parent().attr('id') == 'box-' + selected){
//function
}
});
答案 2 :(得分:1)
可以这样做:
var selected = null;
function setSelected(aSelected) {
if (selected !== null) {
// Remove existing selected click handler
$('#box-' + selected + ' .hit').off('click.selected')
}
selected = aSelected;
// Click handler for new selected el
$('#box-' + selected + ' .hit').on('click.selected', function() { });
}
答案 3 :(得分:0)
我需要看到整个背景要理解, 但在第一眼看来,似乎已发布的代码在您的页面上运行一次。
所以,如果你这样做
var selected = something;
$('#box-' + selected + ' .hit').click(function(){
//function
});
以及稍后
selected = "newvalue";
这不会改变程序行为,已经为特定对象设置了click事件。
在.hit上设置点击处理程序的另一个建议很有意义,然后在处理程序内你可以检查是否
($(this).parent().attr('id')) == ("box-"+selected)
然后才执行你的代码。