jQuery UI 选项卡 - 将参数设置为下一个/上一个按钮单击
jQuery UI Tabs- Setting parameters to NEXT/PREVIOUS button clicks
我目前正在使用 jQuery UI 选项卡以及 ajax。我总共有3个选项卡,只能通过"下一步"和"上一个"按钮导航。我已经设置了参数:在选项卡 1 中,如果您离开输入字段car_name
您将收到一条警报消息和带有 tab2 的类似参数。
我的预期设置:如果不满足参数,则用户无法前进到下一个选项卡。但是,该部分不起作用。用户会收到一个警报:他们可以忽略该警报,再次单击"下一步",然后前进到下一个选项卡。如何禁用"下一步"按钮,直到满足参数(填写输入字段)?例
谢谢
.JS
<script>
$(function () {
var $tabs = $('#tabs').tabs({
disabled: [0, 1, 2],
select: function () {
$.ajax({
type: "POST",
url: "post_tabs.php",
data: {
"name": $("#car_name").val(),
"title": $("#title").val(),
"price": $("#price").val()
},
success: function (result) {
$("#tab-3").html(result);
}
});
}
});
$(".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 »</a>");
}
if (i != 0) {
prev = i;
$(this).append("<a href='#' class='prev-tab mover' rel='" + prev + "'>« Prev Page</a>");
}
});
$('.next-tab, .prev-tab').click(function () {
var prev = $(this).hasClass('prev-tab');
var currentTab = $('#tabs').tabs('option', 'selected');
if (
prev || /*(A)*/ (
currentTab == 0 && /*(B)*/
$.trim($('#car_name').val()).length > 0
) || (
currentTab == 1 && /*(C)*/
$.trim($('#title').val()).length > 0 && $.trim($('#price').val()).length > 0)
) {
var tabIndex = $(this).attr("rel");
$tabs.tabs('enable', tabIndex).tabs('select', tabIndex).tabs("option", "disabled", [0, 1, 2, 3, 4]);
} else if (!prev) {
switch (currentTab) {
case 0:
alert('Please choose an option.', 'Alert Dialog');
break;
case 1:
alert('Please fill out all the required fields.', 'Alert Dialog');
break;
}
}
return false;
});
$('.next-tab, .prev-tab').click(function () {
var tabIndex = $(this).attr("rel");
$tabs.tabs('enable', tabIndex).tabs('select', tabIndex).tabs("option", "disabled", [0, 1, 2, 3, 4]);
return false;
});
});
</script>
.HTML
<div id="tab-1" class="ui-tabs-panel ui-tabs-hide">
<label for="car_name">Car Model</label>
<input type="text" id="car_name" class="detail" name="car_name" value="" /> <br>
</div>
<div id="tab-2" class="ui-tabs-panel ui-tabs-hide">
<label for="title">Title</label>
<input type="text" id="title" name="title" size="60" autocomplete="off" value=""/><br>
<label for="price">Price</label>
<input type="text" id="price" name="price" size="60" autocomplete="off" value=""/><br>
</div>
<div id="tab-3" class="ui-tabs-panel ui-tabs-hide">
</div>
你的代码中有一些奇怪的东西。您注册"下一个"和"上一个"两次...
这不是你的意图。
您想要的是以下行为:
- 如果单击上一个 - 始终转到上一个
- 如果单击"下一步"-仅当满足必填字段时才转到"下一步"。
这意味着您应该更改以下内容
- 从第一个事件中删除
.prev-tab
选择器 - 并删除任何提及prev
可用。此方法应仅处理next
。 - 从第二个事件绑定中删除
next
,这个应该只处理prev
。
所以你的JavaScript看起来像这样:
$('.next-tab').click(function () {
var currentTab = $('#tabs').tabs('option', 'selected');
if (
(
currentTab == 0 && /*(B)*/
$.trim($('#car_name').val()).length > 0
) || (
currentTab == 1 && /*(C)*/
$.trim($('#title').val()).length > 0 && $.trim($('#price').val()).length > 0
)
) {
var tabIndex = $(this).attr("rel");
$tabs.tabs('enable', tabIndex).tabs('select', tabIndex).tabs("option", "disabled", [0, 1, 2, 3, 4]);
} else {
switch (currentTab) {
case 0:
alert('Please choose an option.', 'Alert Dialog');
break;
case 1:
alert('Please fill out all the required fields.', 'Alert Dialog');
break;
}
}
console.log("preventing default");
return false;
});
$('.prev-tab').click(function () {
var tabIndex = $(this).attr("rel");
$tabs.tabs('enable', tabIndex).tabs('select', tabIndex).tabs("option", "disabled", [0, 1, 2, 3, 4]);
return false;
});
这应该可以解决您的问题。
您可以在操作中看到这一点,并在我的网站上下载我的资源
以上将回答您的问题。
现在,请允许我有机会建议一种方法,让您为"下一个"场景编写代码更短一些。
在该行的正上方$('.next-tab').click(function () {
创建以下函数
function isEmpty( item ) {
return $.trim(item.val()).length <= 0;
}
现在 - 在每个输入字段上添加class='required'
,单击next
时不应为空。
在每个选项卡上添加data-alert="The alert message you want to show"
现在 HTML 应该看起来像这样
<div id="tab-1" class="ui-tabs-panel ui-tabs-hide" data-alert="Please choose an option.">
<label for="car_name">Car Model</label>
<input type="text" id="car_name" class="required detail" name="car_name" value="" /> <br>
</div>
<div id="tab-2" class="ui-tabs-panel ui-tabs-hide" data-alert="Please fill out all the required fields.">
<label for="title">Title</label>
<input type="text" id="title" class="required" name="title" size="60" autocomplete="off" value=""/><br>
<label for="price">Price</label>
<input type="text" id="price" class="required" name="price" size="60" autocomplete="off" value=""/><br>
</div>
现在JS代码应该更小,更易于维护(即使您添加另一个带有必填字段的选项卡 - 它不应该改变) - 这里是
$('.next-tab').click(function () {
var $tab = $(this).closest(".ui-tabs-panel");
var $requiredFields = $tab.find(".required");
var canContinue = true;
$requiredFields.each(function(index,item){
console.log(["checking" , item]);
if ( canContinue && isEmpty($(item))){ alert( $tab.attr("data-alert"), 'Alert Dialog' ); canContinue = false; }
});
if ( canContinue )
{
var tabIndex = $(this).attr("rel");
$tabs.tabs('enable', tabIndex).tabs('select', tabIndex).tabs("option", "disabled", [0, 1, 2, 3, 4]);
}
return false;
});
相关文章:
- 当滑块只有一个图像时,如何禁用下一个/上一个按钮
- jQuery UI 选项卡 - 将参数设置为下一个/上一个按钮单击
- 下一个/上一个锚链接,如何在用户滚动时更新下一个/上一个链接
- Jquery UI选项卡&选择方框-下一个/上一个按钮
- 引导分页下一个上一个不起作用
- 使用“下一个”/“上一个”按钮切换图像
- 角度 - ng 网格通过分组按语法选择下一个/上一个项目
- 下一个/上一个 jQuery 控件类跳转了太多的列表项
- 显示带有缩略图和下一个/上一个按钮的图像
- 花式框下一个/上一个不显示 iframe
- j查询滑动选项卡:控制选项 - 下一个/上一个
- 如何将左/右箭头(下一个/上一个)功能添加到我的 jQuery 图像和文本滑块
- j查询带有下一个/上一个的 UI 选项卡
- 如何通过幻灯片查看活动箭头(下一个/上一个)
- 尝试运行下一个上一个按钮以播放列表媒体播放器代码中的视频,出现错误
- 修复了标题导航和滚动到()下一个/上一个元素
- 将下一个/上一个输入集中在达到最大长度或退格键上
- 数据表:禁用第一个下一个上一个最后一个,并在处理时显示/搜索记录
- 如何从简介.js工具提示中动态添加或删除下一个/上一个按钮
- Javascript幻灯片与播放暂停和下一个上一个按钮