Почему эта функция никогда не достигается?

#jquery #ajax #function

#jquery #ajax #функция

Вопрос:

Почему функция с fadeOut никогда не достигается? Каждый раз, когда функция запускается, она обновляет страницу вместо использования AJAX.

 <script type="text/javascript">


function deleterow(id){
if (confirm('Are you sure want to delete?')) {
$.post('delete.php', {id:  id, ajax: 'true' },
function(){
$("#row_" id).fadeOut("slow");
});
}
}

</script>
  

Вот вывод html с помощью php:

 <button onclick="deleterow('.$entry['rowid'].')" class="fg-button fg-button-icon-left ui-state-default ui-corner-all"><span class="ui-icon ui-icon-trash"></span></button>
  

Комментарии:

1. Проверьте свою консоль javascript на наличие ошибок.

2. id: id похоже на ошибку.

3. Имеет ли это какое-либо отношение к тому факту, что ваши кавычки вложены на три глубины? т.Е. » ‘ ‘часть, которая не регистрируется’ ‘ » Может быть, попробовать экранировать эти кавычки?

4. Именно так вы бы создали html в php, поэтому я так не думаю

Ответ №1:

Трудно сказать наверняка, не видя кода / html, который вызывает функцию, но я предполагаю, что это каким-то образом привязано к onclick обработчику. Поэтому, если вы не предотвратите действие по умолчанию (следующее за href тегом a ), оно обновит страницу. Вам нужно вернуть false из функции-обработчика или вызвать event.preventDefault() из нее.

Я бы использовал эту разметку вместо:

 <button 
  value="$entry['rowid']"
  class="fg-delete fg-button fg-button-icon-left ui-state-default ui-corner-all">
  <span class="ui-icon ui-icon-trash"></span>
</button>
  

Кодируя rowid в dom (в данном случае как value ), мы можем получить к нему доступ в наших функциях без необходимости жестко кодировать его в вызове функции и сохранять обработчик незаметным.

 // pulling this into a full definition for clarity
// you could of course just use an anon function inside you $.click call
function handleDelete(event){
   event.preventDefault();
   var $this = $(this);
   var rowId = $this.val();
   deleterow(rowId);
   return false;
}


$('button.fg-delete').click(handleDelete);
  

Демонстрация:http://jsfiddle.net/eBa7v/1 /

Комментарии:

1. Да, это правильно, я использую кнопку onclick. Я думал о выполнении функции preventDefault(). Должен ли я передавать событие через параметры функции?

2. Да, обработчики событий получают объект event в качестве своего единственного аргумента, однако вы можете указать хэш произвольных данных, которые будут передаваться внутри этого объекта event … опубликуйте свою оценку, и я могу привести несколько примеров.

3. @jcane86: Смотрите обновления о том, как я бы это сделал. Также обратите внимание на комментарий Madmartigan к вашему вопросу… похоже, у вас ошибка с id значением post, которое вы отправляете.

4. Комментарий @TrevorMA prodigitalson здесь, я полагаю, предназначался для вас.

5. Варианты.. да, это было… Мне нужно выйти из многозадачности 🙂