2014-09-25 91 views
0

我正在使用名爲contenteditable的HTML5屬性編輯可編輯表格。一切都很好,直到我有另一個告訴用戶剛剛更新的單元的想法。通過一個名爲alert-danger的引導程序強調它。如何將CSS類應用於剛剛成功的ID

小區成功發送後。數據被髮回到父頁面,告知result div狀態是什麼。它只顯示錶格頂部的狀態,但我想在單元格中添加另一個類。所以當數據回調時,我加了$("td[id="+cols3_key+"").addClass('alert-danger');。期望最新的細胞適用於警報 - 危險等級。但它不起作用。這是我的腳本。

的JavaScript

var message_status = $("#status"); 
$("td[contenteditable=true]").blur(function(){ 
    var cols3_key = $(this).attr("id") ; 
    var value = $(this).text() ; 
    $.post('inc/ajax.php' , cols3_key + "=" + value, function(data){ 
     if(data != ''){ 
      $("td[id="+cols3_key+"]").addClass('alert-danger'); 
      message_status.slideDown(); 
      message_status.text(data); 
      //hide the message 
      setTimeout(function(){message_status.slideUp()},3000); 
     } 
    }); 
}); 

的問題是:我怎樣才能改變這一行指細胞已被剛處理?

$("td[id="+cols3_key+"").addClass('alert-danger'); 

問候,

+0

Wjhat是控件ID?試試''('td [id $ =「cols3_key」]')。addClass('alert-danger');' – Amit 2014-09-25 09:29:28

+0

因爲它是單元的ID,爲什麼不使用ID選擇器? $(「#」+ cols3_key).addClass('alert-danger'); – HaukurHaf 2014-09-25 09:30:49

+0

@HaukurHaf,這是行不通的。謝謝。 – Wilf 2014-09-25 09:48:48

回答

0

試試這個,你缺少關閉]

$('td[id="+cols3_key+"]').addClass('alert-danger'); 

OR

$('td[id$="cols3_key"]').addClass('alert-danger'); 
0

你是缺少一個],所以你可以使用$("td[id="+cols3_key+"]")這可以簡單地做成:$("#"+cols3_key)

注意的首次定位在這裏只需要額外的單引號如果ID中包含特殊字符:

例如$("td[id='"+cols3_key+"']")

第二個顯示將在任何情況下工作。

相反,我建議這樣做的更好的辦法:

1)把一個函數的Ajax調用,所以你可以通過特定的元素,這將在每一個Ajax調用被記住。

2)只是參考的元素,並停止擔心ID

事情是這樣的:

var update = function($element){ 
     var value = $element.text(); 
     $.post('inc/ajax.php' , $element.attr('id') + "=" + value, function(data){ 
      if(data != ''){ 
       $element.addClass('alert-danger'); 
       message_status.slideDown(); 
       message_status.text(data); 
       //hide the message 
       setTimeout(function(){message_status.slideUp()},3000); 
      } 
     }); 
    } 

var message_status = $("#status"); 
$("td[contenteditable=true]").blur(function(){ 
    update($(this)); 
}); 
+0

這些行根本不會更新編輯過的文本。謝謝! – Wilf 2014-09-25 09:52:54

+0

每個可編輯的單元格都有該屬性(contenteditable)。它會影響每個細胞嗎? – Wilf 2014-09-25 10:03:10

+0

它將對它們全部進行操作,甚至可以並行多個,因爲函數有一個本地作用域的'$ element',並且每個Ajax調用都會返回到其匹配的調用函數(這要感謝幕後的一些棘手問題)。 – 2014-09-25 10:04:50

0

你可以做$(this).addClass('alert-danger');代替$("td[id="+cols3_key+"").addClass('alert-danger');

如果你沒有得到正確的$(這個)回撥裏面,你可以試試$("td#"+cols3_key+"").addClass('alert-danger');

在jquery中訪問ID必須使用

#. For e.g, to access <td id='test'></td> 
you will have to write $('td#test').addClass('newClass'); 
+2

您可以使用代碼標籤將文本更改爲代碼格式(爲了便於閱讀)。爲此,請突出顯示您的「代碼」,然後按** {} **按鈕。 – 2014-09-25 09:40:30

0

最後,

我有我的方式離開這裏有許多從你們和@TrueBlueAussie通知幫助。這是完整的腳本。

HTML

<h2 class="lead text-danger">HTML5 Inline Edit</h2> 
<div id="status"></div> 
<table class="table table-bordered table-striped"> 
    <tr> 
     <td id="table_col1:1" contenteditable="true"> 
      content1 
     </td> 
     <td id="table_col1:2" contenteditable="true"> 
      content2 
     </td> 
     <td id="table_col1:3" contenteditable="true"> 
      content3 
     </td> 
    </tr> 
</table> 

CSS

#status{ 
    background:#ff0000; 
    border:solid 1px #ccc; 
    border-radius:5px; 
    color:#fff; 
    display:none; 
    padding:5px; 
    width:100%;  
} 

的Javascript

$(window).load(function(){ 
     var message_status = $("#status"); 
     $("td[contenteditable=true]").blur(function(){ 
      var cols3_key = $(this).attr("id") ; 
      var value = $(this).text() ; 
      $.post('' , cols3_key + "=" + value, function(data){ 
       if(data != ''){ 
        $('td[id="'+cols3_key+'"]').addClass('alert-danger');//this is the trick. I need a couple of single quotes here to express that I need a var not an id name 

        message_status.slideDown(); 
        message_status.text(data); 
        //hide the message 
        setTimeout(function(){message_status.slideUp()},3000); 
        setTimeout(function(){$('td[id="'+cols3_key+'"]').removeClass('alert-danger')},3000); 
       } 
      }); 
     }); 
}); 

的工作演示在這裏 - http://jsfiddle.net/nobuts/Lroqpk7x/9/