Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有方法将for循环的索引传递给按钮对象(jQueryUI对话框)中的click函数?_Javascript_Jquery_Dom Events - Fatal编程技术网

Javascript 是否有方法将for循环的索引传递给按钮对象(jQueryUI对话框)中的click函数?

Javascript 是否有方法将for循环的索引传递给按钮对象(jQueryUI对话框)中的click函数?,javascript,jquery,dom-events,Javascript,Jquery,Dom Events,在我的地图应用程序中,我尝试实现一个jQueryUI对话框,根据搜索表单产生的点击数,该对话框具有动态数量的按钮。这些按钮调用showResults()方法,该方法导航到与单击的点击对应的标记 问题是,无论您单击哪个按钮,它都会导航到命中数组的最下方。我知道这是由于点击事件造成的,因此当它被触发时,变量hit将始终包含最后一个条目hit[hit.length-1] 我现在唯一的解决方法是为每个可能的点击量定义单独的函数,我在div.dialog-object中“定期”定义按钮,而不是在for循环

在我的地图应用程序中,我尝试实现一个jQueryUI对话框,根据搜索表单产生的点击数,该对话框具有动态数量的按钮。这些按钮调用
showResults()
方法,该方法导航到与单击的点击对应的标记

问题是,无论您单击哪个按钮,它都会导航到命中数组的最下方。我知道这是由于点击事件造成的,因此当它被触发时,变量hit将始终包含最后一个条目
hit[hit.length-1]

我现在唯一的解决方法是为每个可能的点击量定义单独的函数,我在div.dialog-object中“定期”定义按钮,而不是在for循环中,但这将导致大量冗余代码

这是我的密码:

function multiplehits(message, names, sites) {

    var buttons = [];

    for (var i=0; i < hits.length; i++){
        var hit = hits[i];
        var button = {
            text: names[i]+", "+sites[i],
            click: function () {
                div.remove();
                showResults(hit); /*always navigates to the last entry of the hits array*/
                $(this).dialog("close");                    
            }
        }
        buttons.push(button);
    }
    var div = $('<div>');
    div.html(message);
    div.dialog({
        close: function( event, ui ) {
            hits = [];
        },
        closeText: 'close',
        autoOpen: true,
        modal: true,
        draggable: false,
        resizable: false,
        title: OpenLayers.i18n('Title'),            
        buttons: buttons
    });
}
function multiplehits(消息、名称、站点){
var按钮=[];
对于(变量i=0;i
是否有某种把戏将正确的索引传递给click函数?由于我使用jQuery按钮进行此操作,因此我认为我必须坚持对象结构
button={text,click:function(){}

最快的方法: 替换:

var hit = hits[i];
与:


正确的道路: 了解JavaScript闭包、IIFE、
.bind
方法和ES6的新特性

这是一个很好的起点


代码片段
var hits=[1,2,3];
变量名称=['a','b','c'];
var按钮=[];
函数显示结果(hit){
控制台日志(hit);
}
对于(变量i=0;i

是的,你是对的,我想我的代码是让let语句如此有用的完美例子!我想我应该多读一些,非常感谢链接和示例!
let hit = hits[i];