3

我不太擅长 javascript 和 ajax,所以我请你帮忙。我使用 Symfony2 和 Twig,我有一个字段,我用 jediable 更改了它,但它的值应该是唯一的。所以我在控制器操作中检查了这一点,但我无法成功使应用程序正常运行。我尝试了很多东西,最接近我想要的结果是:

   if (count($same) == 0) {
            // add to database
        } else { 
                $response = new Response();
                $response->setContent('<div class="alert alert-error">
            <button type="button" class="close" data-dismiss="alert">OK</button>
            <strong>This value is already used!</strong> Please choose another.
        </div>');
                $response->send();

输出这个不错的错误:

在此处输入图像描述

但是当我点击OK的时候,jeditable插件还在工作,整个错误变成了可编辑的,所以输入字段的值包含了里面设置的所有HTML$response->setContent()在此处输入图像描述

因为整个街区

        <div class="alert alert-error">
            <button type="button" class="close" data-dismiss="alert">OK</button>
            <strong>This value is already used!</strong> Please choose another.
        </div>

当我单击它时,它位于类“.edit”的 div 中,它变为可编辑并包含整个块。我想要的是当用户单击控制器中生成的警报以从 jeditable 返回输入字段时,在他开始编辑之前将值作为类别的原始名称或使用空值。

这是我的 .js 文件,但它不会使输入字段为空(但它会打印 wokring):(

$(document).ready(function(){

     $('.edit').editable(path, {
         cancel    : 'Cancel',
         submit    : 'Save',
         tooltip   : 'Click to edit'
     });

     $('.bla').on('click','.alert', function(){        
         console.log('working');    
         $("input[type=text]").hmtl('');
     });
});

HTML

<span class="right-spacer"><strong id="{{cat.id}}"class="edit bla">{{ cat.name }}</strong>

任何解决方案的想法?

4

2 回答 2

4

我认为这是缺少的,

if (count($same) == 0) {
    // add to database
    // clear the content on form. 
    //$("input[type=text]").html('');//it should be html not **hmtl**
}

如果没有完成,请尝试并回复..

这应该做..

于 2013-06-26T05:19:42.583 回答
4

如果我理解,当有人使用无效值单击“保存”按钮时,您的弹出错误是动态创建的,这意味着该弹出窗口$(document).ready当时不存在。这就是为什么这部分:

$('.alert').on('click', function(){
    $("input[type=text]").val('');
});

永远不会被执行。如果您希望此功能起作用,则需要使用委托,因为您使用 Jquery 这将非常容易。

代替$('.alert').on('click', function(){

你将不得不使用类似的东西$('body').on('click','.alert', function(){

其中 body 是 的父元素,.alert例如,如果您知道您的弹出窗口将在 id 为 first_div(Something like <div id="first_div">) 的 div 内创建,您将改为$('#first_div').on('click','.alert', function(){

这意味着div会监听他内部的点击事件,所以他离弹窗越近效率越高。

于 2013-06-20T15:43:27.703 回答