【问题标题】:Bootstrap popover with grails and ajax带有 grails 和 ajax 的引导弹出窗口
【发布时间】:2013-04-04 21:02:49
【问题描述】:

只是尝试在 BS 弹出窗口中使用 ajax formRemote。 一个简单的表单可以工作,但 ajax 实现不行:

1) gsp 代码

    <div id="addfolder">
            <a href="#" class="btn" id="nrfolder" rel="popover">
            <i class="icon-folder-close icon-large"></i></a><%--<g:message code="folder"  args="[entityName]" default="New Folder"/>--%></a>
        </div>
        <div id="newRootFolder" style="display:none;">
        <form class="form-inline" style="width:280px;">
        <g:formRemote name="createRootFolder" url="[controller:'folders',action:'create']" onLoading="showModalSpinnerNewFolder();" onComplete="hideModalSpinnerNewFolder();" onSuccess="doResponseNewFolder(data);" >
              <g:textField  name="folderName" class="input-small" type="text" placeholder="New folder"/>
              <input type="submit" value="Create" class="btn btn-info" />
              <a href="#" class="btn"  onclick="$('#nrfolder').popover('hide')"/>Cancel</a>
        </g:formRemote>
</g:formRemote>
    </form>
    </div>

2) 使用 jquery 调用弹出框

$('#nrfolder').popover({placement:'right',title:'New Root Folder',html:true,content: function() { return $('#newRootFolder').html();} });

3) jquery成功事件:doResponseNewFolder函数

function doResponseNewFolder(data) {
        alert('toto' + data.success);
        if (data.success == 'true') {
            var msg = data.msg;
            // reload tree view
            $('#tree').dynatree('getTree').reload();
        } else {
            var msg = $('<ul class="errors">');
            for (var i = 0; i < data.errorList.length; i++) {
                msg.append('<li>' + data.errorList[i] + "</li>");
            }
        }
        $('#new_folder_msg').html(msg);
        $('#new_folder_msg').show();
    }

有什么想法吗?

【问题讨论】:

  • 可以发一下doResponseNewFolder(data)的内容吗?另外,你的#newRootFolderdiv是不小心没有关闭还是省略了末尾粘贴?
  • 感谢合作,div很好地关闭(编辑和修改)
  • 不客气,但请尝试更准确的编码方式:您粘贴的 HTML 不是有效的 XML,这是测试前首先要检查的内容。请记住,良好的缩进是一种最佳做法,这将帮助您避免 XML 语法错误!

标签: ajax grails twitter-bootstrap popover


【解决方案1】:

看来你搞砸了表单,让我解释一下:Grails 的g:formRemote 是制作 ajax Web 表单的助手,所以如果你查看生成的 HTML,就会在调用时生成一个表单。

事实上,您已经打开了一个表单,该表单不是有效的 HTML 语法。第一种形式不应该存在。您可以将其属性赋予您的g:formRemote,Grails 会将它们传递给您生成的form

<g:formRemote class="form-inline" style="width:280px;" name="createRootFolder" url="[controller:'folders',action:'create']" onLoading="showModalSpinnerNewFolder();" onComplete="hideModalSpinnerNewFolder();" onSuccess="doResponseNewFolder(data);" >
      <g:textField  name="folderName" class="input-small" type="text" placeholder="New folder"/>
      <input type="submit" value="Create" class="btn btn-info" />
      <a href="#" class="btn"  onclick="$('#nrfolder').popover('hide')"/>Cancel</a>
</g:formRemote>

这样就足够了。

【讨论】:

  • 不管怎样,我还是不明白你在哪里调用你提到的popover,我也不太明白你想要什么:调用表单? (也就是#newRootFolder的内容)
  • popover content 参数是bool|string according to its documentation,所以你应该把它变成一个字符串。当您调用popover 时,将加载弹出框,除非trigger 的值是'none'。您真正想要什么:表单提交时弹出窗口?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多