Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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 循环中的一次更改_Javascript_Jquery_Loops_For Loop_Mediawiki - Fatal编程技术网

Javascript 循环中的一次更改

Javascript 循环中的一次更改,javascript,jquery,loops,for-loop,mediawiki,Javascript,Jquery,Loops,For Loop,Mediawiki,我正在制作一个与MediaWiki相关的JavaScript解决方案,但它的用途并不是真正需要的信息,所以我将把它留在那里。我有以下功能: wgAjaxLicensePreview=true; function getLicensePreview(num) { console.log('glp num', num); window.licenseSelectorCheck = function () { var selector = document.getEle

我正在制作一个与MediaWiki相关的JavaScript解决方案,但它的用途并不是真正需要的信息,所以我将把它留在那里。我有以下功能:

wgAjaxLicensePreview=true;
function getLicensePreview(num) {
    console.log('glp num', num);
    window.licenseSelectorCheck = function () {
        var selector = document.getElementById("license" + num);
        var selection = selector.options[selector.selectedIndex].value;
        if (selector.selectedIndex > 0) {
            if (selection == "") {
                // Option disabled, but browser is broken and doesn't respect this
                selector.selectedIndex = 0;
            }
        }
        // We might show a preview
        wgUploadLicenseObj.fetchPreview(selection);
    };
    var wpLicense = document.getElementById('license' + num);
    console.log('glp wpLicense', wpLicense);

    if (mw.config.get('wgAjaxLicensePreview') && wpLicense) {
        // License selector check
        wpLicense.onchange = licenseSelectorCheck;

        // License selector table row
        var wpLicenseRow = wpLicense.parentNode.parentNode;
        var wpLicenseTbody = wpLicenseRow.parentNode;

        var row = document.createElement('tr');
        var td = document.createElement('td');
        row.appendChild(td);
        td = document.createElement('td');
        td.id = 'mw-license-preview' + num;
        row.appendChild(td);

        wpLicenseTbody.insertBefore(row, wpLicenseRow.nextSibling);
        console.log('glp row', row);
    }

    window.wgUploadLicenseObj = {

        'responseCache': {
            '': ''
        },

        'fetchPreview': function (license) {
            if (!mw.config.get('wgAjaxLicensePreview'))
                return;
            for (cached in this.responseCache) {
                console.log('glp fp responseCache', this.responseCache);
                if (cached == license) {
                    this.showPreview(this.responseCache[license]);
                    return;
                }
            }
            $('#license' + num).injectSpinner('license' + num);

            var title = document.getElementById('imagename' + num).value;
            if (!title)
                title = 'File:Sample.jpg';

            var url = mw.util.wikiScript('api')
                 + '?action=parse&text={{' + encodeURIComponent(license) + '}}'
                 + '&title=' + encodeURIComponent(title)
                 + '&prop=text&pst&format=json';

            var req = sajax_init_object();
            req.onreadystatechange = function () {
                if (req.readyState == 4 && req.status == 200) {
                    console.log('glp fp response', req.responseText);
                    wgUploadLicenseObj.processResult(eval('(' + req.responseText + ')'), license);
                }
            };
            req.open('GET', url, true);
            req.send('');

        },

        'processResult': function (result, license) {
            $.removeSpinner('license' + num);
            this.responseCache[license] = result['parse']['text']['*'];
            console.log('glp pr result license', result, license);
            this.showPreview(this.responseCache[license]);
        },

        'showPreview': function (preview) {
            var previewPanel = document.getElementById('mw-license-preview' + num);
            console.log('glp sp', previewPanel, preview, previewPanel.innerHTML == preview);
            if (previewPanel.innerHTML != preview)
                previewPanel.innerHTML = preview;
        }

    };
}
问题是我的循环

  var limit = this.max < this.fileCount ? this.max : this.fileCount;
    console.log('glp', this.max, this.fileCount);
    for (i = 1; i <= limit; i++) {
    console.log('glp i', i);
    getLicensePreview(i);
    }
var limit=this.max对于(i=1;i多亏了Barmar的帮助,我能够通过将
wgUploadLicenseObj
变量设置为局部而不是全局
窗口来解决这个问题。wgUploadLicenseObj
。 我的最后一项职能是:

wgAjaxLicensePreview=true;
function getLicensePreview(num) {
    window.licenseSelectorCheck = function () {
        var selector = document.getElementById("license" + num);
        var selection = selector.options[selector.selectedIndex].value;
        if (selector.selectedIndex > 0) {
            if (selection == "") {
                // Option disabled, but browser is broken and doesn't respect this
                selector.selectedIndex = 0;
            }
        }
        var wgUploadLicenseObj = {

        'responseCache': {
            '': ''
        },

        'fetchPreview': function (license) {
            if (!mw.config.get('wgAjaxLicensePreview'))
                return;
            for (cached in this.responseCache) {
                if (cached == license) {
                    this.showPreview(this.responseCache[license]);
                    return;
                }
            }
            $('#license' + num).injectSpinner('license' + num);

            var title = document.getElementById('imagename' + num).value;
            if (!title)
                title = 'File:Sample.jpg';

            var url = mw.util.wikiScript('api')
                 + '?action=parse&text={{' + encodeURIComponent(license) + '}}'
                 + '&title=' + encodeURIComponent(title)
                 + '&prop=text&pst&format=json';

            var req = sajax_init_object();
            req.onreadystatechange = function () {
                if (req.readyState == 4 && req.status == 200) {
                    wgUploadLicenseObj.processResult(eval('(' + req.responseText + ')'), license);
                }
            };
            req.open('GET', url, true);
            req.send('');

        },

        'processResult': function (result, license) {
            $.removeSpinner('license' + num);
            this.responseCache[license] = result['parse']['text']['*'];
            this.showPreview(this.responseCache[license]);
        },

        'showPreview': function (preview) {
            var previewPanel = document.getElementById('mw-license-preview' + num);
            if (previewPanel.innerHTML != preview)
                previewPanel.innerHTML = preview;
        }

    };
        // We might show a preview
        wgUploadLicenseObj.fetchPreview(selection);
    };
    var wpLicense = document.getElementById('license' + num);

    if (mw.config.get('wgAjaxLicensePreview') && wpLicense) {
        // License selector check
        wpLicense.onchange = licenseSelectorCheck;

        // License selector table row
        var wpLicenseRow = wpLicense.parentNode.parentNode;
        var wpLicenseTbody = wpLicenseRow.parentNode;

        var row = document.createElement('tr');
        var td = document.createElement('td');
        row.appendChild(td);
        td = document.createElement('td');
        td.id = 'mw-license-preview' + num;
        row.appendChild(td);

        wpLicenseTbody.insertBefore(row, wpLicenseRow.nextSibling);
    }
}

与问题无关:
selector.options[selector.selectedIndex].value;
可以简化为
选择器。value
将函数指定给
窗口是否有原因。licenseSelectorCheck
?每次调用函数时都会重新指定该全局变量。我仍在阅读并试图理解代码…这些窗口变量无法工作…您正在逐个覆盖它们时间在循环LOL,我甚至不确定我是对的。请随意发布您实际编码的内容。