【问题标题】:Validate a value changed with Jeditable验证使用 Jeditable 更改的值
【发布时间】:2013-06-18 09:25:09
【问题描述】:

我不太擅长 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();

输出这个不错的错误:

但是当我点击确定的时候,jeditable插件还在工作,整个错误变成可编辑的,所以输入字段的值包含了$response-&gt;setContent()中设置的所有HTML

因为整块

        <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>

有什么解决办法吗?

【问题讨论】:

    标签: javascript jquery jeditable


    【解决方案1】:

    如果我理解,当有人使用无效值单击“保存”按钮时,您的弹出错误是动态创建的,这意味着弹出窗口在 $(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 的 div 内创建(类似于 &lt;div id="first_div"&gt;),您将改为使用 @987654327 @

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

    【讨论】:

    • 如果打印“working”是好事,说明函数执行完毕。 $("input") 是一个非常模糊的选择器,你不可能给输入一个 ID 并这样称呼他: $("#input_id") 我也看到你放了 .html('') 但是那是行不通的,你需要使用 .val('')
    【解决方案2】:

    我认为这是缺失的,

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

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

    应该这样做..

    【讨论】:

    • 注意:实际上这也将进入其他部分..或者在按下确定按钮时调用function reset(){$("input[type=text]").html('');}.. :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多