【问题标题】:Button with submit buttons as subitems将提交按钮作为子项的按钮
【发布时间】:2015-05-25 21:21:15
【问题描述】:

应用程序显示一个包含表单元素的 html 页面。该表单有几个提交按钮。其中一个是标题为“关闭交易”的按钮。当用户单击此按钮时,会出现一些上下文菜单。上下文菜单有“未提交”、“价格太高”、“其他”等选项。单击一个选项应该提交表单(就像提交按钮一样)。后端需要知道用户点击了其中一个选项(而不是其他提交按钮)以及哪个选项。

如何实现?

我找到了一个 jquery ui split button example,但它没有提供所需的功能。例如,不需要两个按钮(一个带有文本,一个带有箭头) - 只有一个行为 - 显示上下文菜单。另外,我不明白如何制作提交表单的项目。

我试图找到其他东西,但没有找到足够接近要求的东西。

【问题讨论】:

    标签: javascript jquery html forms jquery-ui


    【解决方案1】:

    从您链接到的JQuery UI Split Button Widget 开始,这里有一些调整,以使按钮在单击时提供可供选择的选项,并且在单击选项时将这些单击(按钮和列表项)发送到服务器通过表单 POST。

    HTML:

    <form id="deal_form">
        <input type="hidden" name="submit_action" value=""/>
        <input type="hidden" name="submit_type"   value=""/>
    </form>
    <div>
      <div id="submit_actions">
        <button id="close_deal">Close Deal</button>
      </div>
      <ul>
        <li>Not Submitted</li>
        <li>Price Too High</li>
        <li>Other</li>
      </ul>
    </div>
    

    JavaScript:

    $(function() {
        $( "#close_deal" )
        .click(function(evtCD) {
            var menu = $( this ).parent().next().show().position({
                my: "left top",
                at: "left bottom",
                of: this
            });
            $("#deal_form input[name='submit_action']").val(evtCD.target.innerHTML);
            $( document ).one( "click", function(evtDOC) {
                menu.hide();
                if ( 'LI' === evtDOC.target.tagName ) {
                    $("#deal_form input[name='submit_type']").val(evtDOC.target.innerHTML);
                    $("#deal_form").submit();
                }
            });
            return false;
        })
        .parent()
        .buttonset()
        .next()
        .hide()
        .menu();
    });
    

    当然,您可以向表单添加更多输入,这些输入可以在单击按钮和列表项之前填写,并且这些值会随表单提交一起发送。

    JSFiddle with it here.

    【讨论】:

    • 谢谢,它看起来很有希望。但它似乎并没有真正提交表单。我也尝试过添加警报,如api.jquery.com/submit,但没有显示对话框,控制台中也没有任何错误。为什么?
    • JQuery submit 方法有两个用途:一是提交表单,二是添加事件处理程序。当您向 中添加函数参数时,您并没有提交表单,而是添加了一个事件处理程序。有关示例,请参见此 JSFiddle:jsfiddle.net/arfbu26f/3
    • 我了解基于事件的版本不提交表单。由于表单根本没有提交,因此我引入了它以进行故障排除。
    • 要记住的另一件事是,JSFiddle 出于安全原因实际上并没有提交表单,但是如果您打开浏览器的 JavaScript 控制台,您会看到调用了表单提交方法。 -- 除此之外,您是否尝试过我链接到的新 JSFiddle,并看到弹出警报?
    • 我终于找到了没有提交的原因。这是一个名称冲突(我的一个按钮被命名为提交)。
    【解决方案2】:

    它可能会发送某种 ajax 帖子或获取请求。我一直这样做是为了过滤器等。

     
    $('#btn1').click(function(){
    $.post( "pages/somepage.php?view", { 
        id: $(this).attr('data-rel')
        }).done(function( data ) {
        $(".right-side").html( data );
    });
    });
    
    $('#btn2').click(function(){
     $.post( "pages/somepage.php?delete", { 
        id:  $(this).attr('data-rel')
        }).done(function( data ) {
        $(".right-side").html( data );
    });
    });
    <form name="d" >
      <button id="btn1" data-rel="1" >Do something</button>
      <button id="btn2" data-rel="2" >Do something else</button>
     </form>

    【讨论】:

    • 离我需要的太远了。 1) 它不提交包含按钮的表单。 2) 它没有展示带有提交按钮的拆分/下拉功能。
    猜你喜欢
    • 2017-07-14
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 2011-10-20
    • 2011-03-23
    • 2012-07-10
    • 2014-02-03
    相关资源
    最近更新 更多