【问题标题】:How to have two buttons in JQuery Steps如何在 JQuery Steps 中有两个按钮
【发布时间】:2017-07-05 00:11:48
【问题描述】:

我真的需要一些帮助。所以我使用了一个Jquery Steps PlugIn。现在在这个插件中,当我们转到last tab 时,它有一个按钮名称为“完成”,当点击调用"onFinishing" 方法时。

onFinishing: function () {
            var loadedPrefix = MyNamespace.loadedPrefix;
            var inputBoxPrefix = $('#SitePrefix').val();
            $.ajax({
                type: 'POST',
                url: '/Settings/IsPrefixExists',
                data: { newPrefix: inputBoxPrefix, prefixLoadedFromDB: loadedPrefix },
                success: function (data) {
                      // do some stuff here
                    }
                },
                error: function () {
                    DisplayError('Failed to load the data.');
                }
            }); 
        }

现在上面的工作非常好。但我的经理希望我在那里有两个按钮。一个作为“保存”,另一个作为“提交”。单击它们中的每一个都会执行不同的操作。但是这个插件只有一个“完成”按钮。它是通过 PlugIn 的 Javascript 代码生成的。我能不能用 JQuery/Javascript 在那儿多放一个按钮,然后写一些代码。

JS FIDDLE 示例:JS FIDDLE SAMPLE

图 1:

我想要像下面这样的东西 图 2:

示例示例: JS FIDDLE

【问题讨论】:

  • 如果这不是一个不费吹灰之力的代码请求......
  • 告诉我如何在 JSFIddle 中添加该插件,我将展示我的努力。您能告诉我如何在 JSFiddle 中添加该插件吗?
  • Stack Overflow 有自己的内置 JSFiddle 版本:stackoverflow.blog/2014/09/16/…
  • @LouysPatriceBessette:我在这里创建了一个 JsFiddle。你能指导我吗? jsfiddle.net/unbreakable/o2gxgz9r/9543

标签: javascript jquery jquery-steps


【解决方案1】:

使用Steps plugin documentation 中的onStepChanged 事件...

你可以这样做:

$( window ).load(function() {
  $("#example-basic").steps({
    headerTag: "h3",
    bodyTag: "section",
    transitionEffect: "slideLeft",
    autoFocus: true,
    onFinishing: function () {
      alert("Hello");
    },
    onStepChanged:function (event, currentIndex, newIndex) {
      console.log("Step changed to: " + currentIndex);

      if(currentIndex == 2){
        console.log("ok");
        var saveA = $("<a>").attr("href","#").addClass("saveBtn").text("Save");
        var saveBtn = $("<li>").attr("aria-disabled",false).append(saveA);

        $(document).find(".actions ul").prepend(saveBtn)
      }else{
        $(".actions").find(".saveBtn").remove();
      }
      return true;
    },

  });


  // on Save button click
  $(".actions").on("click",".saveBtn",function(){
    alert("Saving!");
  });
});

Updated JSFiddle

【讨论】:

  • 非常感谢。你能告诉我这里超时的使用吗?您的代码工作正常,但对于像我这样的初学者来说有点复杂。因此,您添加了一个锚标记,然后将该锚标记添加到 Button,然后将其添加到 UL 元素。到这里我才明白。超时有什么意义?
  • 另外,currentIndex ==1 的检查,我看不懂。
  • 根本没用...我不知道.actions是否是动态的...所以我默认这样做了。
  • 我理解 currentIndex ==1 部分。没关系。当我们处于索引 1 并切换到索引 == 2 时,我们需要准备好按钮。谢谢陛下!
  • 索引在更改时返回...这就是当前。所以 1 是第二个,因为这个索引是从零开始的。
【解决方案2】:

无论使用步骤插件,您都可以在最后一步添加一个保存按钮,并像使用任何普通按钮一样绑定一个点击处理程序:

<input id='btnSave' name='btnSave' value='Save' type='button'>

在你的 javascript 中:

$('#btnSave').click(function() {
    $.ajax({
            type: 'POST',
            url: '/Settings/SavePrefix',
            data: { newPrefix: inputBoxPrefix, prefixLoadedFromDB: loadedPrefix },
            success: function (data) {
                  // do some stuff here
                }
            },
            error: function () {
                DisplayError('Failed to save the data.');
            }
        }); 
});

您还可以根据需要注入按钮。

使用带有#steps-uid-8 的标签内的默认插件,您可以获得带有$('#steps-uid-8 a').last() 的finish 元素;它嵌套在 &lt;li&gt; 内,而 &lt;ul&gt; 内则您可以获得对 ul $('#steps-uid-8 a').last(),parent().parent() 的引用

使用该引用,您可以添加一个超链接,以便您的“按钮”具有与插件相同的样式,如下所示:

$('#steps-uid-8 a').last().parent().parent().prepend("<li><a id='btnSave' name='btnSave'>Save</a></li>");

如果需要,您还可以在设置中添加一个功能,仅在最后一步显示“保存”按钮

var numberOfSteps=3,// change as needed

var settings = {
    onStepChanged: function (event, currentIndex, priorIndex) 
    { 
    if(currentIndex==numberOfSteps) $('#btnSave').show();
    else $('#btnSave').hide();
    }
}

使用你的小提琴,onload Javascript 被简单地改变了。

<script>
      function saveMe() {
        alert('Saving');
      }
      $(window).load(function() {
        var lastStep = 2;
        $("#example-basic").steps({
          headerTag: "h3",
          bodyTag: "section",
          transitionEffect: "slideLeft",
          onStepChanged: function(event, currentIndex, priorIndex) {
            //console.log(currentIndex);
            if (currentIndex == lastStep) $('#btnSave').show();
            else $('#btnSave').hide();
          },
          autoFocus: true,
          onFinishing: function() {
            alert("Hello");
          },
        }).find('a')
        .last().parent().parent()
        .prepend("<li><a style='display:none' href='#save' id='btnSave' name='btnSave' onclick='saveMe()'>Save</a></li>");
      });
    </script>

这是一个工作副本:https://jsfiddle.net/rwh64ja8/

【讨论】:

  • 我会尽力回复你。我会给出一个 jSFIddle,但我不知道如何在 JSFIddle 中添加这个插件。
  • 我需要在哪里放置此代码。此插件使用其 javascript 代码自动创建“完成”按钮。我应该把你给的代码放在哪里?请指导我。
  • 这条线的去向&lt;input id='btnSave' name='btnSave' value='Save'&gt;
  • 非常感谢。我会试试这个,然后会回复你。另外,我将尝试在 StackOverflow 小提琴中添加代码,以便我可以正确地提出我的疑问。
  • 您好先生,我已经创建了 Jsfiddle。你能在这里指导我吗? jsfiddle.net/unbreakable/o2gxgz9r/9543
猜你喜欢
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多