【问题标题】:Jquery Modal window - Modal property breaks codeJquery 模态窗口 - 模态属性破坏代码
【发布时间】:2012-10-03 04:19:34
【问题描述】:

我希望有人可以提供帮助。我在 JQuery 模式窗口中运行表单时缺少一些逻辑和样式,并且“modal”属性设置为“true”。我正在尝试使用来自http://jqueryui.com/dialog/#modal-form 的表单。

在模式窗口外使用的相同代码运行正常。我不确定如何解决它,并决定与您分享。

我在 JSFiddle 中创建了一个页面 - http://jsfiddle.net/vladc77/GcQRg/16 来显示代码。但是,不能从那里运行模态窗口。结果,我在这里上传了相同的测试 - http://www.vladcdesign.com/modalWindow

当我设置 (modal: true) 时,我遇到了以下问题。

1.工作时间表单中的复选框应启用/禁用菜单设置时间

2.“更多”复选框应显示/隐藏文本字段

3.我无法在时间设置表单中设置元素之间的边距。现在所有菜单都相互接触,即使我使用边距样式。他们只是不适用。

所有这些问题仅在我在模式窗口中运行此 DIV 时才会出现。它在模态窗口之外工作正常。我想知道是否有人可以帮助解释代码有什么问题。非常感谢任何建议。

【问题讨论】:

  • 有什么帮助吗?我仍然无法解决这个问题。谢谢。

标签: javascript jquery html forms modal-dialog


【解决方案1】:

查看小提琴和您在网站上发布的示例,您会收到以下错误:

Uncaught ReferenceError: closedHours is not defined

问题似乎来自这一行:

$(this).append(' <span class="closed custom-checkbox"><input type="checkbox" name="closed" value="closed" class="closed" id="closedHoursElement" onchange="closedHours()"><span class="box"><span class="tick"></span></span></span>Closed');

此外,您无法在小提琴上加载对话框的原因是您以错误的顺序包含 JS 文件。应该是jquery,jquery ui,然后是jquery ui.selectmenu。

您在复选框上的更改功能也有一个错误,应该是这样的:

$('input[type=checkbox]').change(function() {
    if (!this.checked) {
        $(this).parent().siblings('select').removeAttr("disabled");
    }
    else {
        $(this).parent().siblings('select').attr('disabled', 'disabled');
    }
});

即使我更改了所有这些,复选框仍然不起作用,因此我删除了您的自定义 jquery 和 jquery ui 引用。当我这样做时,它们工作得很好,所以您为自定义这些所做的事情就是导致您的问题的原因。您可以查看我的更改here

【讨论】:

  • 感谢您帮助我。看来我有希望了。我试图将您的更改应用到我的项目中,但它不起作用。我想知道您是否可以从这里查看:skydrive.live.com/…。我不确定我错过了什么,但就我而言,它仍然无法正常工作。再次感谢您。
  • 在做了一点点工作之后,看起来跨度包装器是复选框无法正常工作的原因。我删除了它,并且能够使切换正常工作。不幸的是,selectmenu 小部件似乎并没有注意底层选择的 disabled 属性。更新小提琴:jsfiddle.net/bhayden1/GcQRg/19
  • 抱歉,花了更多时间。我非常感谢您的努力和帮助。
  • 我发现如果我将 modal 属性更改为 false 则复选框正在工作。你可以看这里-jsfiddle.net/vladc77/GcQRg/22。但是,我错过了覆盖,仍然错过了选择菜单的样式。使用模态属性看起来有些问题。我创建了新线程来调查更多相关信息:stackoverflow.com/questions/12877424/…。我想知道你是否对此有任何想法。再次感谢您。
【解决方案2】:

第一个$(document).ready(function(){});和第二个$(function() { });是一样的,代码会按照它们在这些块中的顺序执行.

但是$(window).load(function(){ }); 有点不同,它会在稍后执行。检查此post 以查看差异。

您可以通过将点击事件定义为“打开模式窗口”按钮来进行一些实验,并在触发时执行所有绑定:

$('#create-user').bind('click',function(e){
  // To avoid navigating by link
  e.preventDefault();
  e.stopPropagation();
  // Do every binding / appending 
  // $('.workDayHours').each(function() { ...
});

【讨论】:

  • 感谢您的建议。我会试试看。但是,我发现问题来自“模态”属性,因此不得不编辑我的帖子。我想知道你是否熟悉jqueryui.com/dialog/#modal-form。并了解围绕此问题的工作。再次感谢您。
  • 我尝试了你的方法,但它并没有改变任何东西。还是谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
相关资源
最近更新 更多