#php #jquery #ajax #codeigniter
Вопрос:
В настоящее время у меня есть страница редактирования, на которой любые внесенные мной изменения отражаются в моей базе данных. Но одна часть моей формы не отправляет данные, а именно вкладка примечания, где, если заметок нет, пользователь может добавить новую заметку в базу данных или, если заметка уже существует, они должны иметь возможность ее редактировать. В настоящее время это мой код:
Просмотр Класса:
lt;div id="notes-wrap"gt; lt;table id="tableobj1"gt; lt;theadgt; lt;tr class="active"gt; lt;thgt;Datelt;/thgt; lt;thgt;Noteslt;/thgt; lt;th nowrapgt;Added Bylt;/thgt; lt;th colspan="2" nowrapgt;Actionlt;/thgt; lt;/trgt; lt;/theadgt; lt;tbodygt; lt;tr id="objrows1" class="tblerow1"gt; lt;td colspan="3"gt;lt;textarea name="note" class="form-control notes" placeholder="Notes"gt;lt;/textareagt;lt;/tdgt; lt;td colspan="2" width="1%"gt;lt;button type="submit" class="btn-sm savenotes" data-href="lt;?php echo site_url('contacts/savenotes/'.$leadid); ?gt;" gt; lt;i class="fa fa-save"gt;lt;/igt;lt;/buttongt;lt;/tdgt; lt;/trgt; lt;?php if($notes) foreach($notes as $val):?gt; lt;trgt; lt;td nowrap="nowrap"gt;lt;?php echo($val['added_date']);?gt;lt;/tdgt; lt;td width="75%" class="textnote"gt;lt;?php echo nl2br($val['note']) ?gt;lt;/tdgt; lt;td width="15%"gt;lt;smallgt;lt;?php echo $val['display_name'] ?gt;lt;/smallgt;lt;/tdgt; lt;td width="1%" align="center"gt;lt;agt;lt;i class="fa fa-pencil"gt;lt;/igt;lt;/agt;lt;a data-url="lt;?php echo site_url('contacts/updatenote/'.$val['notes_id']) ?gt;" style="display:none"gt;lt;i class="fa fa-save"gt;lt;/igt;lt;/agt;lt;/tdgt; lt;td width="1%" valign="middle" align="center"gt;lt;a data-url="lt;?php echo site_url('contacts/deletenote/'.$val['notes_id']) ?gt;" gt;lt;i class="fa fa-trash"gt;lt;/igt;lt;/agt;lt;/tdgt; lt;/trgt; lt;?php endforeach; ?gt; lt;/tbodygt; lt;/tablegt; lt;button type="submit" class="btn btn-success waves-light"gt;Submitlt;/buttongt;
JS
$(document).ready(function(){ $("#notes-wrap").on("click", "button.savenotes", function(e){ e.preventDefault(); saveleadnotes($(this)); }); $("#tableobj1").on("click", "tbody a.remove", function(e) { var $t=$(this).closest ('tr');$u = $(this).data('url'); swal({ title: "Are you sure?", text: "You will not be able to recover this!", type: "warning", showCancelButton: true, confirmButtonClass: 'btn-warning', confirmButtonText: "Yes", closeOnConfirm: true }, function (e) { if($u amp;amp; e){ removeobj($u); $t.remove(); } else if(e){ $t.remove(); } }); }); function saveleadnotes(obj){ $.ajax({ url: obj.data('href'), async:false, type:"post", data:obj.closest('.tblerow1').find(':input').serialize(), success: function(result){ if(resultlt;1) { obj.closest('.tblerow1').find('[name="note"]').focus(); } else { leadnotesdocs('lt;?php echo site_url('contacts/notes/'.$contact-gt;id); ?gt;','#notes-wrap'); } } }); }
Controller Class:
function edit($id,$return=0) { if ($this-gt;form_validation-gt;run() == FALSE) { $edit['notes']= $this-gt;contacts_model-gt;load_notes($id); $edit['leadid']= $id; } else { $maindata=array('agents_id'=gt;$this-gt;input-gt;post('agents_id')); $updated=$this-gt;contacts_model-gt;update($maindata,$id); if($updated){ if($this-gt;input-gt;post('notes')){ foreach($this-gt;input-gt;post('notes') as $key =gt; $note): if($note !='') { $smdata = array('contacts_id'=gt;$id,'note'=gt;$note,'added_by'=gt;$this-gt;session-gt;userdata('clientsessuserid')); $this-gt;contacts_model-gt;save_notes($smdata); } endforeach; } } public function updatenote($id){ if($this-gt;form_validation-gt;run() == TRUE) { $maindata = array('note'=gt;$this-gt;security-gt;xss_clean($this-gt;input-gt;post('leadnote'))); $insid= $this-gt;contacts_model-gt;update_notes($maindata,array('notes_id'=gt;$id)); $c= $this-gt;contacts_model-gt;load($id,"refno"); $this-gt;contacts_model-gt;saveactivity(array('object_ref'=gt;$c-gt;refno,'object_id'=gt;$insid,'activity'=gt;'Note Updated','action'=gt;'Updated')); echo $insid;exit; } } public function savenotes($id){ if($this-gt;form_validation-gt;run() == TRUE) { $maindata = array('contacts_id'=gt;$id,'note'=gt;$this-gt;input-gt;post('note'),'added_by'=gt;$this-gt;session-gt;userdata('clientsessuserid')); $insid= $this-gt;contacts_model-gt;save_notes($maindata); $contacts= $this-gt;contacts_model-gt;load($id,"refno"); $this-gt;contacts_model-gt;saveactivity(array('object_ref'=gt;$contacts-gt;refno,'object_id'=gt;$insid,'activity'=gt;'Note Added','action'=gt;'Added')); echo $insid;exit; } }
Класс Модели:
function save_notes($maindata){ $this-gt;db-gt;insert("crm_contacts_notes",$maindata); return $this-gt;db-gt;insert_id(); } function load($id) { $id=$this-gt;db-gt;escape_str($id); $cond=array('id'=gt;$id); $this-gt;db-gt;where($cond); $this-gt;db-gt;from("crm_contacts"); $query = $this-gt;db-gt;get(); return $query-gt;row(); } function update_notes($maindata,$cond){ return $this-gt;db-gt;update("crm_contacts_notes",$maindata,$cond); }
Но это просто обновляет страницу всякий раз, когда я нажимаю кнопку «Сохранить», и в мою базу данных ничего не отправляется. Я даже не вижу, делаются ли какие-либо запросы, так как всякий раз, когда я нажимаю кнопку сохранить, страница обновляется.
Комментарии:
1. У вас синтаксическая ошибка в
e.preventDefault(),saveleadnotes($(this));
. Вы должны разделить два выражения с помощью a;
, а не a,
. И если вы не хотите, чтобы эта кнопка отправляла форму, изменитеlt;button type="submit"
lt;button type="button"
ее, и вам это не понадобитсяe.preventDefault()
. И в качестве общего предложения вам следует разумно отформатировать свой код. Соблюдайте отступы в коде и придерживайтесь одного выражения в строке. Это значительно облегчит чтение и отладку вашего кода (и поиск опечаток, подобных той, на которую я указал).2. Внутри этого
$("#notes-wrap").on("click", "button.savenotes", function(e){...}
. Вы уверены, что это событие спровоцировало. Кажется, что когда вы нажимаете «Сохранить», то все начинается с этого. Попробуйтеe.preventDefault();
, а затемconsole.log(e);
или сделайте какое-нибудь предупреждение, чтобы убедиться, что это событие работает. Однако я нигде не вижу никакихnotes-wrap
удостоверений личности.3. @MagnusEriksson поэтому я изменил свой
,
на;
и заменил кнопку отправить как, но теперь, когда я нажимаю на кнопку, ничего не происходит, в моей консоли также нет вызова AJAX.4. @vee поэтому я попытался добавить код предупреждения ниже
e.preventDefault();
, и он не вернул никаких выходных данных, когда я нажал на него.5. @H2O Это означает, что ваш прослушиватель событий
$("#notes-wrap").on("click", ...)
не работает. Как я уже говорил… Я нигде не вижу HTMLid="notes-wrap"
(до вашего последнего редактирования). Это событие начните слушать с этогоid
. С момента вашего последнего редактирования этоid
уже существует. Попробуйте еще раз выполнить отладку, если этот прослушиватель событий работает.