Firefox 中未定义 Javascript 事件

标签 javascript jquery

这个问题之前已经被问过,但我仍然在努力思考如何修复我的案例中的错误。我是学习 Javascript/jQuery 的新手。 Firefox 给出错误“ReferenceError:getFirstArr 未定义”。我有一个我在这里尝试执行的简化脚本 JSFiddle (要使其正常工作,请先选择年份按钮,然后再选择月份按钮)。

罪魁祸首似乎是 getFirstArr(videos[i]) 第 28 行。我真的不知道该尝试什么,因为我的代码似乎是正确的。它适用于 Safari、Chrome 和 IE。 Firefox 是个奇怪的人。这是问题所在的点击事件的片段。

$('.campbutton').on('click', function () {
    camp = $(this).attr('id');
    $('.campbutton').removeClass('green');
    $(this).addClass('green');
    $('#searcharea').html('<table></table>');
    var campyear = camp + year;
    var count = 1;
    var noResultCount = 0;

    for (i = 0; i < videos.length; i++) {
        for (j = 0; j < 5; j++) {
            getFirstArr(videos[i]); // Firefox doesn't like this line
            function getFirstArr(video) { // prints the the array where a match is found

JSFiddle 将拥有完整的代码。所以我的问题是,为什么 Firefox 不接受函数调用,需要更改什么?任何帮助或提示表示赞赏(顺便说一句,我仍在努力获取正确的表格标签以正确格式化输出,以便视频不只是堆叠在自身之上)。

编辑:Firefox 的具体问题是当单击“camp”按钮时,div 中没有加载视频。其他按钮事件都很好。

这是有问题的完整代码:

    var videos = [ ["string1A", "string1B", "string1C"], ["string2A", "String2B", String2C"] ];
var camp = "";
var year = "";
$('#searcharea').html('select a year button first');

$('.yearbutton').on('click', function () {
    year = $(this).attr('id');
    $('.yearbutton').removeClass('green');
    $(this).addClass('green');


});

$('.campbutton').on('click', function () {
    camp = $(this).attr('id');
    $('.campbutton').removeClass('green');
    $(this).addClass('green');
    $('#searcharea').html('<table></table>');
    var campyear = camp + year;
    var count = 1;
    var noResultCount = 0;
    for (i = 0; i < videos.length; i++) {
        for (j = 0; j < 5; j++) {
            getFirstArr(videos[i]);
            function getFirstArr(video) {
                if (campyear === video[j]) {
                    var pos = video.indexOf(video[j]);                  
                    $('#searcharea').append('<tr><td>' + video[(pos - pos)] + '</td>' + '<td>' + 'Composer: ' + video[(pos -pos) + 1] + '<br>' + 'Player: ' + video[(pos - pos) + 2] + '<br>' + 'Piece: ' + video[(pos - pos) + 3] + '</td>');
                } 
                else noResultCount++;                    

                if (campyear === video[j] && count % 3 === 0 && j === 4)
                    $('#searcharea').append('</tr><tr>');

                if (i === videos.lenght && j === 4)
                    $('#searcharea').append('</table>');

            }   
        }
      count++;
    }
    if (noResultCount === videos.length * 5) 
         $('#searcharea').html("No results found");



});

最佳答案

http://jsfiddle.net/3ncc5xdx/123/

在这里,我已将您的函数移至循环之外,如下所示,我认为它有效,除非我误解了问题所在:

$('.campbutton').on('click', function () {
    camp = $(this).attr('id');
    $('.campbutton').removeClass('green');
    $(this).addClass('green');
    $('#searcharea').html('<table></table>');
    var campyear = camp + year;
    var count = 1;
    var noResultCount = 0;
    function getFirstArr(video) {
        if (campyear === video[j]) {
            var pos = video.indexOf(video[j]);                  
            $('#searcharea').append('<tr><td>' + video[(pos - pos)] + '</td>' + '<td>' + 'Composer: ' + video[(pos -pos) + 1] + '<br>' + 'Player: ' + video[(pos - pos) + 2] + '<br>' + 'Piece: ' + video[(pos - pos) + 3] + '</td>');
        } 
        else noResultCount++;                    

        if (campyear === video[j] && count % 3 === 0 && j === 4)
            $('#searcharea').append('</tr><tr>');

            if (i === videos.lenght && j === 4)
                $('#searcharea').append('</table>');    
            }   
        for (i = 0; i < videos.length; i++) {
            for (j = 0; j < 5; j++) {
                getFirstArr(videos[i]);
            }
            count++;
        }
    if (noResultCount === videos.length * 5) 
     $('#searcharea').html("No results found");
});

所以它起作用的原因是该函数现在在使用一次之前声明。另外,它现在只声明一次,而不是在循环中一次又一次地声明。它可能在 Chrome 中有效,因为 Chrome 非常智能,可以理解您的暗示 - 但 Firefox 需要稍微更严格的方法。

关于Firefox 中未定义 Javascript 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27299491/

相关文章:

javascript - 如何使用 jQuery 在可见和隐藏之间切换(切换、交替)元素?

javascript - 添加属性以使用父级的数据属性进行选择?

javascript - 如何在 jQuery 中制作目录

javascript - 文件输入的 Bootstrap 模式问题

javascript - 在带有 Image2 插件的 CkEditor 4.3 中,更改图像 src 的正确方法是什么?

javascript - 为什么 Canvas.FillText 方法似乎使用了错误的坐标?

javascript - node,js 使用变量作为键名向 json 添加外部级别

JQuery for slidedown() 中的 css 类名循环

jquery append 将内联 li 向下推

使用 '+=px' 的 Jquery 动画对象在某个像素处停止