2013-06-18 84 views
3

我不太擅長JavaScript和ajax,所以我請你幫忙。我使用Symfony2和Twig,並且我有一個字段,可以使用jediable進行更改,但其值應該是唯一的。所以我在控制器操作中檢查了這一點,但我無法成功使應用正常運行。我嘗試了很多的東西,最接近我想要的結果是這樣的:驗證用Jeditable更改的值

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(); 

,輸出這個漂亮的錯誤:

enter image description here

但是當我點擊確定,jeditable pluging仍工作,並且整個錯誤變得可編輯,所以輸入字段的值包含所有HTML設置$response->setContent()enter image description here

因爲整個塊

 <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中,當我點擊它時,它變得可編輯幷包含這整個塊。我想要的是當用戶點擊在控制器中生成的警報,以便在開始編輯之前或者使用空值返回到可輸入字段的值作爲類別的原始名稱。

這是我的js文件,但它不會使輸入字段爲空(但它打印工作呢):(

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

如果我明白,當有人點擊「保存」按鈕時,彈出的錯誤是動態創建的,這意味着彈出窗口不存在於$(document).ready ti我。這就是爲什麼這部分:

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

永遠不會執行。如果你想讓這個函數起作用,你將需要使用委託,因爲你使用Jquery這很容易。

而不是$('.alert').on('click', function(){

你將不得不使用像$('body').on('click','.alert', function(){

凡身體是的.alert父母,爲爲例,如果你知道你的彈出窗口將一個div內部創建一個元素與第一個_div(類似於<div id="first_div">)的東西你可以把$('#first_div').on('click','.alert', function(){

這意味着該div將聽取他內部的點擊事件,所以他越靠近彈出窗口就越有效率。

+0

仍然沒有工作:( – Faery

+0

我更新了我的問題,希望它的現在更難以擺脫。 – Faery

+1

如果它打印「工作」,這是一件好事,這意味着該功能被執行。 $(「輸入」)是一個非常模糊的選擇器,是不可能給你輸入一個ID並給他打電話: $(「#input_id」) 我也看到你把.html ''),但是這不會起作用,你需要使用.val('') –

4

我覺得這是缺少,

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

嘗試和回覆,如果不這樣做..

這應該做..

+0

注意:實際上它也會進入其他部分..或者只是調用一個函數reset(){$(「input [type = text)「)。html('');}'按下OK按鈕.. :) – MarmiK