2

'我正在尝试执行类似下面的操作,仅当父“框”ID 正确时单击“命中”类时才会运行一个函数。

var selected = 1;    

$('#box-' + selected + ' .hit').click(function(){

    selected = randomFromTo(1,5);

});

selected变量会根据页面上的其他操作而变化,但在任何更改后我都无法使该功能正常工作 - 它保持固定为最初选择的“框”ID。我可以想象为什么会这样,因为 jQuery 已经拍摄了该字符串的快照,并且没有告诉它更新它,但我不知道如何解决这个问题。

编辑:添加所选变量的实例化及其设置位置。我省略了 UI 更改,这将使用户更容易理解。

4

4 回答 4

3

您可以只在类上设置点击处理程序.hit,然后在处理程序本身中检查父节点以获取正确的 ID。如果你这样做,请确保你正确地推迟了事件,否则你最终会为每个.hit元素使用一个处理程序。

于 2013-02-20T23:44:07.650 回答
2

如果我正确理解您的问题,那么问题是selected在创建函数时对变量进行了评估。该函数绑定到当时click的一组 DOM 元素的事件。

绑定后,不能修改选择器,修改选择时使用的任何变量都没有效果。

我能想到的最好的解决方法是将点击事件附加到所有可能的匹配项,然后在click处理程序中进一步过滤它们......

$('.hit').click(function(){
    // check if the parent has the correct id
    if($(this).parent().attr('id') == 'box-' + selected){
        //function
    }
});
于 2013-02-20T23:47:43.573 回答
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() { });
}
于 2013-02-20T23:49:24.980 回答
0

我需要查看整个上下文才能理解,但乍一看,发布的代码似乎在您的页面上运行一次。

所以如果你这样做

var selected = something;

$('#box-' + selected + ' .hit').click(function(){

    //function

});

后来

selected = "newvalue";

这不会改变程序行为,已经为特定对象设置了点击事件。

在 .hit 上设置点击处理程序的另一个建议很有意义,然后在处理程序内部您可以检查是否

($(this).parent().attr('id')) == ("box-"+selected)

然后才执行您的代码。

于 2013-02-20T23:46:07.407 回答