РЕШЕНИЕ
Благодаря доказательству концепции Армана П., наконец, он стал работать с моим сайтом.
код
//Edit Note
$(function(){
function makeEditable() {
$(".edit").editable('ajax/save.php?editnotetext', {
type : 'mce',
submit : '<button class="save_button">Save</button>',
event: 'dblclick',
indicator : 'Saving...',
tooltip : 'Doubleclick to edit...',
onblur: 'ignore',
width : '700px',
height : '100px',
callback : function(value, settings){
console.log('unlocked');
$.post('ajax/save.php?unlocknotetext', {"id" : $(this).attr('id')});
$(this).effect("highlight", {}, 3000);
$(this).parents('.panel').effect("highlight", {}, 3000);
},
'onreset' : function(){
console.log('unlocked');
$.post('ajax/save.php?unlocknotetext', {"id" : $(this).attr('id')});
}
});
};
makeEditable();
$('.edit').live('click', function() {
console.log('locked');
$.post('ajax/save.php?locknotetext', {"id" : $(this).attr('id')});
});
$(".edit").click(function() {
$.post('ajax/save.php?checklock', {"id" : $(this).attr('id')},
function(data) {
// USE SAME OPTION IN BOTH PLACES
// IF YOU USE 1ST OPTION, YOU CAN TAKE JEDITABLE OUT OF makeEditable() and do everything without that function
if (data[0].is_locked == 1) {
// Option 1
//$(this).editable('disable');
//alert(data[0].username.toUpperCase() + " is editing this note!");
// Option 2
$(".edit").unbind('dblclick');
} else {
// Option 1
//$(this).editable('enable')
// Option 2
makeEditable();
}
},
"json"
);
});
});
UPDATE
Итак, теперь, согласно тому, что, как мне кажется, предложил Арман, я сделал JEdtiable работающим, только если запускается пользовательское событие. Я пытаюсь вызвать событие, только если не нашел блокировки. Но теперь JEditable не вызывают. Что-то не так с тем, как я пытаюсь это вызвать. [Обратите внимание, что JEditable вызывается, если я проверю его с помощью кнопки вроде <button onclick="$('.edit').trigger('custom_event');">Click to Edit</button>
]
код
Так вот мой новый код
$(function(){
$(".edit").bind("dblclick",function() {
$.ajax({ // first check to see if locked
type: "POST",
url: "ajax/save.php?locknotetext",
data: {"id" : $(this).attr('id')},
dataType: "json",
success: function(data){
if (data[0].is_locked == 1){ // if locked then alert someone is editing ntoe
alert(data[0].username.toUpperCase() + " is editing this note!");
}
else{
$(this).trigger('custom_event');
$(this).unbind('custom_event.editable');
}
}
}); //close $.ajax(
});
});
Вот JEditable части
$(function(){
$(".edit").editable('ajax/save.php?editnotetext', {
type : 'mce',
submit : '<button class="save_button">Save</button>',
event: 'custom_event',
indicator : 'Saving...',
tooltip : 'Doubleclick to edit...',
onblur: 'ignore',
width : '700px',
height : '100px',
callback : function(value, settings){
console.log(this, value, settings);
$(this).effect("highlight", {}, 3000);
$(this).parents('.panel').effect("highlight", {}, 3000);
$.ajax({
type: "POST",
url: "ajax/save.php?unlocknotetext",
data: {"id" : $(this).attr('id')}
}); //close $.ajax(
//$(this).addClass("edit");
}
// },
// function(value, settings) {
// $(this).unbind('settings.event');
});
});
ФОН
Я создаю веб-сайт, где люди могут делиться и редактировать заметки. Я хотел бы сделать следующее: если кто-то редактирует заметку, она блокируется, и другой пользователь не может ее редактировать.
Я использую JEditable. Пользователи могут дважды щелкнуть, чтобы отредактировать заметку.
Если пользователь дважды щелкает, я выполняю AJAX-вызов, чтобы проверить, есть ли блокировка в заметке. Если нет, я блокирую заметку, и пользователь может редактировать. Если есть блокировка, я предупреждаю пользователя «userX в настоящее время редактирует заметку».
ПРОБЛЕМА
Моя проблема в том, что я хочу вызывать JEditable только тогда, когда нет блокировки. В противном случае, я просто хочу предупредить пользователя, что кто-то еще его редактирует. Проблема, которую я получаю с моим кодом ниже, заключается в том, что JEditable вызывается несмотря ни на что Я также пытался использовать другое имя класса для редактирования и добавлять класс только тогда, когда в обратном вызове первого вызова AJAX нет блокировки, но это тоже не работает.
Любые предложения приветствуются!