【问题标题】:jQuery when list item selected, add to current class div选择列表项时的jQuery,添加到当前类div
【发布时间】:2023-03-18 11:55:01
【问题描述】:

我有一个用于语言选择器的 jQuery 下拉列表。目前我有一个关于它如何工作的框架设置,但我对如何启动活动的 jQuery 函数感到很困惑。

我希望它做的是当用户从列表中单击一种语言时,语言名称(或将来的标志)将出现在“当前 div 类”的顶部。

当前类中的默认值是英文列表项。

我不确定如何开始,但从研究中我发现我可以创建一个if statement 并使用append/prepend 元素?我的方向正确吗?

我正在使用 Codeigniter 并创建了一个语言翻译器,因此在具有 html 锚标记的内部,我的 php 是这样编写的:

<li id="french"><?php echo anchor('fr/'.strtolower($page_info['fr_title']), 'FR'); ?></li>

这里是一个粗略原型的链接,说明了它当前的设置方式。任何教程或指导将不胜感激。

如果语言是法语,则显示法国国旗等:

$(function() {
    if ( document.location.href.indexOf('en') > -1 ) {
        alert('english');
    } else {
        if ( document.location.href.indexOf('ru') > -1 ) {
            alert('russian');
        }else {
            if ( document.location.href.indexOf('fr') > -1 ) {
                alert('french');
            }else {
                if ( document.location.href.indexOf('fr') > -1 ) {
                    alert('french');    
                    }
                }
            }
        }
    });

谢谢!

链接:http://jsfiddle.net/Wmb4n/2/

【问题讨论】:

标签: jquery list if-statement append


【解决方案1】:

检查这个fiddle

$('#lang_selector ul li').click(function () {
    $('.current').text($(this).text());    
});

编辑:您的if.. else 语句需要清理。

$('#lang_selector ul li').click(function () {
    $('.current').text($(this).text());
var loc = document.location.href;
    if (loc.indexOf('en') > -1) {
        alert('english');
    } else if (loc.indexOf('ru') > -1) {
        alert('russian');
    } else if (loc.indexOf('fr') > -1) {
        alert('french');
    } else if (loc.indexOf('fr') > -1) {
        alert('french');
    }
});

【讨论】:

  • 非常感谢。这在我的代码中有效,但它似乎会轻弹,然后由于页面刷新(当语言更改并且页面更改为俄语时)回到我假设的当前状态。是否有防止解决方案我可以使用这个div 以阻止它从页面刷新更改。感谢您的简短示例:)
  • @user2212564 我不确定,但试试这个$('#lang_selector ul li').click(function (e) { $('.current').text($(this).text()); e.preventDefault(); });
  • 已经尝试过了,不幸的是它没有将页面更改为俄语或法语。我在我的代码中创建了一个 sn-p,我现在将添加到我认为我可能会触发它的方式。
  • @user2212564 你有什么收获吗alert(document.location.href);
【解决方案2】:

不确定这是否是你想要的..

试试看..

 $(document).ready(function(){
    $('.current').click(function(){
    $(this).siblings('ul').slideToggle();
});
    $('ul li').click(function(){
      $(this).parent().prev('span').text($(this).text());
    });
});  

fiddle here

【讨论】:

    【解决方案3】:

    好的,user1671639 回答了我上面的问题,但另一个问题是页面正在刷新新的语言内容,这意味着所选的 div 在页面加载之前闪烁。我也试过$('#lang_selector ul li').click(function (e) { $('.current').text($(this).text()); e.preventDefault(); });

    使所选项目保持活动状态,但不会用语言内容刷新页面。

    我不确定这是否是正确的方法,但如果有人能想到一个更简单的解决方案,那就太好了。

    我已经为我的脚本添加了一个链接,但由于图像和 php 不包含在其中,因此无法正常工作。基本上,当用户选择列表中的图标时,页面会被刷新,然后 jQuery 检查 url 是否具有 fr 或 en ect,如果是,则将 li id = french 与图像附加到当前范围。

    链接:http://jsfiddle.net/Wmb4n/7/

    这行得通:

    $(function() {
        var loc = document.location.href;
    
            if (loc.indexOf('en') > -1) {
                $("span.current").append(english);
    
            } else if (loc.indexOf('ru') > -1) {
                $("span.current").append(russian);
    
            } else if (loc.indexOf('fr') > -1) {
                $("span.current").append(french);
    
            } else if (loc.indexOf('de') > -1) {
                $("span.current").append(german);
            }
        });
    

    要更改锚标签中的语言翻译是这样的:

    <?php echo anchor('fr/'.strtolower($page_info['fr_title']), 'FR'); ?>
    

    【讨论】:

    • 当你做 alert(document.location.href); 时你得到什么了吗?想知道你得到前缀了吗?
    • 使用我提交的代码作为我的答案并使用警报(document.location.href);我明白了:localhost:8888/website-name/en/home 并更改我所在的任何页面或语言。对吗?
    • 检查这个 fiddle 为我工作,我犯错了吗?
    • 您没有犯错,它只有将页面刷新为“法语”,然后下拉菜单重置,法语 fr 不显示。你的代码确实有帮助:)
    • 出于好奇,只是想知道是什么原因导致的问题:)你想阻止页面刷新吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多