1

我正在使用仅使用上一个和下一个按钮操作的 Jquery UI 选项卡。在我的第一个选项卡中,我有选择框,为了前进,您必须从选择框中选择一个选项。我担心的是 Tab#2 我有三个输入字段,我希望用户在继续之前填写它们。

如何禁用“下一步”按钮,以便用户在进入下一个选项卡之前被迫填写输入字段?例子

JS-下一个/上一个

<script>
        $(function() {

                var $tabs = $('#tabs').tabs({
                    disabled: [0, 1]
                });

                $(".ui-tabs-panel").each(function(i) {

                    var totalSize = $(".ui-tabs-panel").size() - 1;

                    if (i != totalSize) {
                        next = i + 2;
                        $(this).append("<a href='#' class='next-tab mover' rel='" + next + "'>Next Page &#187;</a>");
                    }

                    if (i != 0) {
                        prev = i;
                        $(this).append("<a href='#' class='prev-tab mover' rel='" + prev + "'>&#171; Prev Page</a>");
                    }

                });


                $('.next-tab, .prev-tab').click(function() {
                    var tabIndex = $(this).attr("rel");
                    if (
                        /*(1)*/ $('#tabs').tabs('option', 'selected') > 0 ||
                        /*(2)*/ ($('.update.last').length > 0 && parseInt($('.update.last').val(), 10) > 0)
                    ) {
                        $tabs.tabs('enable', tabIndex)
                            .tabs('select', tabIndex)
                            .tabs("option","disabled", [0, 1]);
                    }
                    return false;
                });

        });
</script>

HTML

<div id="tab-2" class="ui-tabs-panel ui-tabs-hide">
  <label for="title"> Title: *</label>
    <input type="text"  id="title" name="title" class="" size="33" autocomplete="off" value="<? $title ?>"/><br>
    <label for="price"> Price: *</label>             
      <input type="text" name="price" class="" size="8" maxlength="9" id="price" autocomplete="off" value="<? $price ?>" /><br>
           <label for="description"> Description: *</label> 
         <textarea id="description" name="description" class=""><? $description ?></textarea><br />

</div>
4

3 回答 3

3

仅更改下一个一个按钮上的选项卡,如果

  • (A) 上一个按钮已被点击或
  • (B) 当前选项卡是第一个选项卡,确实存在最后一个选项,并且选择了一个选项或
  • (C)当前选项卡是第二个选项卡,所有(修剪)文本值都不为空。

这是下一个未经测试的扩展:

$('.next-tab, .prev-tab').click(function() {
    var tabIndex = $(this).attr("rel");
    if (
        $(this).hasClass('prev-tab') ||                          /*(A)*/
        (
            $('#tabs').tabs('option', 'selected') == 0 &&        /*(B)*/
            $('.update.last').length > 0 && 
            parseInt($('.update.last').val(), 10) > 0
        ) ||
        (
            $('#tabs').tabs('option', 'selected') == 1 &&        /*(C)*/ 
            $.trim($('#title').val()).length > 0 && 
            $.trim($('#price').val()).length > 0 &&
            $.trim($('#description').val()).length > 0
        )
    ) {
        $tabs.tabs('enable', tabIndex)
            .tabs('select', tabIndex)
            .tabs("option","disabled", [0, 1]);
    }
    return false;
});

=== 更新 ===

添加了特定于选项卡的警报:

$('.next-tab, .prev-tab').click(function() {
    var prev = $(this).hasClass('prev-tab');
    var currentTab = $('#tabs').tabs('option', 'selected');
    if (
        prev ||                                                  /*(A)*/
        (
            currentTab == 0 &&                                   /*(B)*/
            $('.update.last').length > 0 &&
            parseInt($('.update.last').val(), 10) > 0
        ) ||
        (
            currentTab == 1 &&                                   /*(C)*/
            $.trim($('#title').val()).length > 0 &&
            $.trim($('#price').val()).length > 0 &&
            $.trim($('#description').val()).length > 0
        )
    ) {
        var tabIndex = $(this).attr("rel");
        $tabs.tabs('enable', tabIndex)
            .tabs('select', tabIndex)
            .tabs("option","disabled", [0, 1]);
    } else if (!prev) {
        switch (currentTab) {
            case 0:
                alert('Please choose an option.');
                break;
            case 1:
            case 2:
                alert('Please fill out all form inputs.');
                break;
        }
    }
    return false;
});
于 2012-07-27T05:29:25.573 回答
1

修改点击事件处理程序:

$('.next-tab, .prev-tab').click(function() {
  var $t = $(this), tabIndex = $t.attr("rel");
  if ($t.hasClass("prev-tab")) {
    if ($("input").filter('[value=""]').length) {
      alert("Please fill out all form inputs.");
      return false;
    }
  }
...

希望有帮助。

于 2012-07-26T22:22:36.350 回答
0

您可以编写一个验证函数来查看选定的选项卡,然后查看需要填写的项目以供下一个启用。然后可以将此功能绑定到需要填写的每个项目的更改。

于 2012-07-26T22:09:29.197 回答