【问题标题】:Ternary operator is not working as expected三元运算符未按预期工作
【发布时间】:2019-12-10 07:11:46
【问题描述】:

在我的代码中,我通过JSTL 设置了一个名为language 的变量。我就是这样做的。

<%@ page pageEncoding="UTF-8" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@taglib prefix="c" uri= "http://java.sun.com/jsp/jstl/core" %>
<c:set var="language" value="${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale}" scope="session" />
<fmt:setLocale value="${language}" />
<fmt:setBundle basename="text" />

我有一个 JQuery 代码,它将检查 language 并相应地显示内容。

<script >
    $(function() {
        $('#SelecttheCategory').on('change', function() {
            alert("${language}");
            val = $(this).val();

            $.get("DynamicPopProductList?categoryID=" + val, function(responseJson) {

                var $dropdown = $("#Selecttheproducts");
                $dropdown.empty();

                $.each(responseJson, function(index, item) {
                    $dropdown.append($("<option />").val(item.idproduct).text($ {
                        language
                    } == 'si' ? item.sinhalaName : item.productName));
                });

            });
        });
    }); 
</script>

如果语言是sinhala,我需要显示item.sinhalaName,如果不是,我将显示item.productName。无论如何,这不会按预期工作。我什么也得不到。但是在我的alert 中,它会将language 正确显示为si

我该如何解决这个问题?

【问题讨论】:

  • 如果 alert() 按预期工作,那么您将在控制台中看到引用错误。
  • 仅供参考,三元运算符是 Javascript 构造,它与 jQuery 无关
  • ${language} == 'si' 是例如扩展为si == 'si',由于没有名为si的变量,所以表示undefined == 'si',当然是false

标签: javascript java jquery servlets jstl


【解决方案1】:

假设${language} 值被输出到服务器端的源代码,那么您需要将其用引号括起来以使Javascript 语法正常工作。试试这个:

var optionText = '${language}' === 'si' ? item.sinhalaName : item.productName;
$dropdown.append($("<option />", {
  value: item.idproduct,
  text: optionText
});

【讨论】:

    猜你喜欢
    • 2018-02-19
    • 2012-12-22
    • 2020-01-09
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    相关资源
    最近更新 更多