【问题标题】:Display a value of a button on a JSP Page in a modal以模式显示 JSP 页面上按钮的值
【发布时间】:2019-12-28 00:07:57
【问题描述】:

我有一个包含多个产品的 JSP 页面。每个产品都有一个按钮,该按钮调用包含在 JSP:INCLUDE 页面中的模型。 我们将模态代码放入单独的 JSP 中以便更好地组织它。

我们想使用这个模态并根据我们从被点击的按钮传递给模态的值来显示文本。它类似于“产品一”的按钮将显示模式“产品一”中的文本,可能还有其他一些文本。

我在 stackoverflow 和 google 上进行了搜索,但找不到一些提示来存档。我尝试使用 JSP:PARAM 和 JSP INCLUDE,但这是在页面级别。例如,对于用户单击标题上的不同文本的每个按钮,我都需要它。

…… 预订旅游的按钮。

<button data-aos="fade-up-right" data-aos-duration="2000" data-aos-offset="100" class="gold-btn call-us" onClick="document.getElementId('action').value=this.value;return true;">Book Tour</button>

它调用了一个名为“call-us”的模态

“call-us”模式代码:

<div class="callback">
    <div class="callus--modal">
        <div class="grid-container">
            <div class="grid-x grid-margin-x">  
                <div class="cell large-12 medium-12 small-12 text-right">   
                    <div class="callus-close">X</div>
                </div>  
                <div class="cell large-12 medium-12 small-12 text-center">  
                    <img src="http://www.roma-vaticano.com/assets/images/common/divider.png">
                </div>
                <div class="cell large-12 medium-12 small-12 text-center">  
                    <h2>${param.booking_title}</h2>
                    <h3>We will call you back</h3>
                </div>
            </div>
            <form id="callback-form">
            <div class="grid-x grid-margin-x">
                <div class="cell large-12 medium-12 small-12 text-center">
                    <input type="text" name="name" id="callback_name" value="" placeholder="First and Last Name *" required>
                </div>
                <div class="cell large-4 medium-4 small-12 text-center">
                    <input type="text" name="prefix" id="callback_prefix" maxlength="3" value="" placeholder="prefix *" required>
                </div>

                <div class="cell large-8 medium-8 small-12 text-center">
                    <input type="text" name="phone" id="callback_phone" value="" placeholder="Phone Number *" required>
                </div>
                <div class="cell large-12 medium-12 small-12 text-center">
                    <input type="text" name="email" id="callback_email" value="" placeholder="email address *" required>
                </div>
                <div class="cell large-12 medium-12 small-12 text-center">
                    <div class="autorizzazione" style="text-align: left;">
                        <div class="check_box">
                            <input type="checkbox" value="si" id="callback_auth" name="privacy" required>
                            <label for="e_auth"></label>
                        </div> 
                        <p>I confirm that i have read the privacy policy. *</p>
                        <div style="clear: both;"></div>
                    </div>
                    <div class="autorizzazione" style="text-align: left;">
                        <div class="check_box">
                            <input type="checkbox" value="si" id="callback_newsletter" name="newsletter">
                            <label for="e_auth"></label>
                        </div> 
                        <p>I want to recieve special offers about Rome and the Vatican</p>
                        <div style="clear: both;"></div>
                    </div>
                  </div>
                </div>
                    <div class="grid-x grid-margin-x">
                        <div class="cell large-12 medium-12 small-12 text-center">
                            <input class="gold-btn" id="callback_submit" type="submit" value="CALL ME BACK" style="border: none !important; position: relative; float: none;">
                        </div>
                    </div>
                </div>
             </div>
            </form>
        </div>
    </div>
</div>

<script>


$("#callback-form").validate({
   errorClass: "contact-error",
   validClass: "contact-valid",
   rules: {
    name: "required",
    prefix: {
      required: true,
      maxlength: 3
    },
    phone: "required",
    email: "required",
    privacy: "required"
  },
  messages: {},
  submitHandler: function(form) {
    sendCallbackEmail();
  }
});

function sendCallbackEmail() {
    var name = $('#callback_name').val();
    var prefix = $('#callback_prefix').val();
    var phone = $('#callback_phone').val();
        var email = $('#callback_email').val();

    var params = {};
    params.name = name;
    params.prefix = prefix;
    params.phone = phone;
        params.email = email;
    $.get( "/contacts/callback", params ).done(function( data ) {
        if (data.success) {
            $('#callback_submit').val("SENT");
            $("#callback_submit").prop("disabled",true);
        } else {
            alert("Error");
        }
    });
}
</script>

如您所见,我们使用 JSP:PARAM 进行了尝试,这很有效。但不是在按钮级别上,它为每个正常的按钮显示相同的值。 ${param.booking_title} 在模态中所在的位置应该有将从按钮传递到显示的模态的值的文本。 我们想在页面的每个按钮上添加不同的文本。

【问题讨论】:

    标签: javascript html jsp


    【解决方案1】:

    jsp:param 适用于后端(服务器)中设置的值。

    但是如果你想modify DOM element without sending requests(如h:button, h:link),你需要调用js函数并修改它。

    为你的h2元素设置id并调用showDlg函数

    function showDlg(text){
        
        $("#booking-title").text(text);
        $(".callback").show();
        document.getElementById('action').value=this.value;
        return true;
    }
    
    $("#callback-form").validate({
       errorClass: "contact-error",
       validClass: "contact-valid",
       rules: {
        name: "required",
        prefix: {
          required: true,
          maxlength: 3
        },
        phone: "required",
        email: "required",
        privacy: "required"
      },
      messages: {},
      submitHandler: function(form) {
        sendCallbackEmail();
      }
    });
    
    function sendCallbackEmail() {
        var name = $('#callback_name').val();
        var prefix = $('#callback_prefix').val();
        var phone = $('#callback_phone').val();
            var email = $('#callback_email').val();
    
        var params = {};
        params.name = name;
        params.prefix = prefix;
        params.phone = phone;
            params.email = email;
        $.get( "/contacts/callback", params ).done(function( data ) {
            if (data.success) {
                $('#callback_submit').val("SENT");
                $("#callback_submit").prop("disabled",true);
            } else {
                alert("Error");
            }
        });
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.js"></script>
    
    <button data-aos="fade-up-right" data-aos-duration="2000" data-aos-offset="100" class="gold-btn call-us" onClick="showDlg('Book Tour')">Book Tour</button>
    <input type="hidden" id="action" />
    
    <hr/>
    
    <div class="callback" style="display:none">
        <div class="callus--modal">
            <div class="grid-container">
                <div class="grid-x grid-margin-x">  
                    <div class="cell large-12 medium-12 small-12 text-right">   
                        <div class="callus-close">X</div>
                    </div>  
                    <div class="cell large-12 medium-12 small-12 text-center">  
                        <img src="http://www.roma-vaticano.com/assets/images/common/divider.png">
                    </div>
                    <div class="cell large-12 medium-12 small-12 text-center">  
                        <h2 id="booking-title">${param.booking_title}</h2>
                        <h3>We will call you back</h3>
                    </div>
                </div>
                <form id="callback-form">
                <div class="grid-x grid-margin-x">
                    <div class="cell large-12 medium-12 small-12 text-center">
                        <input type="text" name="name" id="callback_name" value="" placeholder="First and Last Name *" required>
                    </div>
                    <div class="cell large-4 medium-4 small-12 text-center">
                        <input type="text" name="prefix" id="callback_prefix" maxlength="3" value="" placeholder="prefix *" required>
                    </div>
    
                    <div class="cell large-8 medium-8 small-12 text-center">
                        <input type="text" name="phone" id="callback_phone" value="" placeholder="Phone Number *" required>
                    </div>
                                    <div class="cell large-12 medium-12 small-12 text-center">
                        <input type="text" name="email" id="callback_email" value="" placeholder="email address *" required>
                    </div>
                    <div class="cell large-12 medium-12 small-12 text-center">
                        <div class="autorizzazione" style="text-align: left;">
                            <div class="check_box">
                                <input type="checkbox" value="si" id="callback_auth" name="privacy" required>
                                <label for="e_auth"></label>
                            </div> 
                            <p>I confirm that i have read the privacy policy. *</p>
                            <div style="clear: both;"></div>
                        </div>
                                            <div class="autorizzazione" style="text-align: left;">
                                            <div class="check_box">
                                <input type="checkbox" value="si" id="callback_newsletter" name="newsletter">
                                <label for="e_auth"></label>
                            </div> 
                            <p>I want to recieve special offers about Rome and the Vatican</p>
                            <div style="clear: both;"></div>
                        </div>
                                            </div>
                                            </div>
                        <div class="grid-x grid-margin-x">
                            <div class="cell large-12 medium-12 small-12 text-center">
                                <input class="gold-btn" id="callback_submit" type="submit" value="CALL ME BACK" style="border: none !important; position: relative; float: none;">
                            </div>
                        </div>
                    </div>
                </div>
                </form>
            </div>
        </div>
    </div>

    【讨论】:

    • 您好 Valijon,感谢您的解决方案。我对其进行了测试,并且有效。但是我注意到,如果我将带有 的 javascript 的回调模式代码包含到页面中,则不会显示文本。它必须与按钮代码所在的 HTML 位于同一个 JSP 文件中。我想知道为什么 JSP:Include 在这里不起作用。包含的原因是我们可以为回调表单制作代码并在多个页面上重用它。如果是 JSP 原生解决方案,我有兴趣知道什么也有效。
    • 解决方案现在有效。我想我忘记了 js:include 包含的文件中的一些代码。如果我想为“booking-title2”之类的按钮添加更多值并将其显示在模态的其他位置,这也是可能的,还是我们只能通过按钮使用一个可以传递给模态的值?我还检查了使用服务器端的 h:button 解决方案,但这似乎只适用于 JSF,但我们使用的是 JSP。如果我们可以使用具有多个值的服务器端,那也很好。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多