Помогите разобраться где ошибка в JS?

Ошибка в smiles.js, но там ли эта ошибка?

#1 26 августа 2015 в 04:11
Возник вопрос по исправлению ошибки в JS
Подключил плагин instantcms.ru/blogs/melochi-502/plagin-vstavit-foto-iz-lichnyh-albomov-1-10-and-uarr.html
На instantcms 1.10.4 работает но выдает ошибку в логах браузера:
в одном случае так:
Uncaught TypeError: Cannot read property 'value' of null imageLoaded @ (program):150onclick @ aboutsite.html:1
В другом случае так(в неомессенджере):
Uncaught TypeError: Cannot read property 'value' of null imageLoaded @ smiles.js:150onclick @ aboutsite.html:1

вот код в smiles.js на который он ругается
  1. function imageLoaded(field_id, data){
  2. var txtarea = document.getElementById(field_id);
  3. var txtval = txtarea.value;
  4. var pos = getCaretPos(txtarea);
  5. txtarea.value = txtval.substring(0,pos) + ' [IMG]'+data+'[/IMG] ' + txtval.substring(pos,txtval.length);
  6. return;
  7. }
на данную строку
  1.  
  2. var txtval = txtarea.value;
  3.  
smiles.js находится по адресу:
/core/js/smiles.js
Не могу понять в чем может быть проблема

Вот код файла loader.php (в папке с плагином лежит)
  1.  
  2. <?php
  3. //KSajaxloader
  4. define('PATH', $_SERVER['DOCUMENT_ROOT']);
  5. include(PATH.'/core/ajax/ajax_core.php');
  6. if ($inUser->id){
  7. $cfg_plugin = $inCore->loadPluginConfig('p_bb_myfoto');
  8. $limit = $cfg_plugin['максимальное количество фото'] ? $cfg_plugin['максимальное количество фото'] : 200;
  9. $public_sql = "SELECT title, imageurl
  10. FROM cms_user_photos
  11. WHERE user_id = '{$inUser->id}' ORDER BY pubdate DESC LIMIT {$limit}";
  12. $public_res = $inDB->query($public_sql);
  13. if ($inDB->num_rows($public_res)) {
  14. while($photo = $inDB->fetch_assoc($public_res)){
  15. $userphoto .= '
  16. <a style="margin:3px" onclick="imageLoaded(\'content\', \'/images/users/photos/medium/'.$photo['imageurl'].'\');" href="javascript:imageLoaded(\'message\', \'/images/users/photos/medium/'.$photo['imageurl'].'\');">
  17. <img title="'.$photo['title'].'" width="70" height="70" border="0" src="/images/users/photos/small/'.$photo['imageurl'].'" alt="'.$photo['title'].'"/></a>';}}
  18. echo '</br>'.$userphoto.'</br>';
  19. return true;}
  20. return false;
  21. cmsCore::halt();
  22. ?>
  23.  
Вот код файла plugin.php
  1.  
  2. <?php
  3. //KS_p_bb_myfoto_2013
  4. class p_bb_myfoto extends cmsPlugin {
  5. public function __construct(){
  6. parent::__construct();
  7. $this->info['plugin'] = 'p_bb_myfoto';
  8. $this->info['title'] = 'BB code кнопка вставки фото из личных альбомов';
  9. $this->info['description'] = 'Позволяет вставить свое фото при помощи bb code';
  10. $this->info['author'] = 'KS';
  11. $this->info['version'] = '1.10*2013';
  12. $this->config['максимальное количество фото'] = 200;
  13. $this->events[] = 'GET_BBCODE_BUTTON';}
  14. public function install(){
  15. return parent::install();}
  16. public function upgrade(){
  17. return parent::upgrade();}
  18. public function execute($event, $bb_html) {
  19. parent::execute();
  20. $inDB = cmsDatabase::getInstance();
  21. $inUser = cmsUser::getInstance();
  22. if(!$inUser->id){return $bb_html;}
  23. $my_foto = $inDB->rows_count('cms_user_photos', "user_id = '{$inUser->id}'", 1);
  24. if($my_foto){
  25. $bb_html.='<a style="cursor:pointer" class="usr_bb_button" onclick="$(\'#imginsert\').hide(\'slow\');$(\'.ajax-loader\').show();$(\'#panelfoto\').load(\'/plugins/p_bb_myfoto/loader.php\', function(){$(\'.ajax-loader\').hide(\'slow\');$(\'#panelfoto\').toggle(300);});" title="Вставить изображение из своих альбомов"><img src="/includes/bbcode/images/preview.png"></a>
  26. <div id="panelfoto" class="usr_msg_smilebox" style="width:100%;max-height:160px;overflow:auto;text-align:center;display:none"></div>';}
  27. else{
  28. $bb_html.='<a style="cursor:pointer" class="usr_bb_button" onclick="$(\'#panelfoto\').slideToggle(\'fast\')"
  29. title="Вставить изображение из своих альбомов"><img src="/includes/bbcode/images/preview.png"></a>
  30. <div id="panelfoto" class="usr_msg_smilebox" style="text-align:center;display:none">
  31. </br></br></br></br>
  32. Вы еще не загружали изображения в личные альбомы... <a href="/users/addphoto.html">Перейти</a> на страницу загрузки?
  33. </br></br></br></br>
  34. </div>';}
  35. return $bb_html;}}
  36. ?>
  37.  
Подскажите пожалуйста в чем может быть проблема и как ее решить?
#2 26 августа 2015 в 08:57

на данную строку
Код PHP:
 
var txtval = txtarea.value;
 

web4ik
а txtarea у вас корректно определяется? как передаете id'шник элемента?
#3 26 августа 2015 в 10:08
<a style="margin:3px" onclick="imageLoaded('content', '/images/users/photos/medium/ab11729f746b56351f3829ef1c84de1f.jpg');" href="javascript:imageLoaded('message', '/images/users/photos/medium/ab11729f746b56351f3829ef1c84de1f.jpg');">
<img title="123.jpg" width="70" height="70" border="0" src="/images/users/photos/small/ab11729f746b56351f3829ef1c84de1f.jpg" alt="123.jpg"></a>
вот ссылка которая формируется, при нажатии на картинку создается ббкод(это все хорошо) но вылазиет ошибка, а из neomessenger instantcms.ru/blogs/neo-blog/besplatnyi-plagin-neomessenger-2-1-1.html вообще не трулала.


Да собственно и хотелось бы в этом разобраться корректно или не корректно. Код выдернул из плагина я писал не сам его, указал ссылку на источник в первом посте еще. Все стандартно попытался поразбираться в чем причина, думал заместо var txtval = txtarea.value;
написать такой вот код:
  1. if (txtarea != null) {
  2. var str = txtarea.value;
  3. }
  4. else {
  5. var str = null;
  6. }
Но всеровно ругается… Не знаю в чем может быть проблема поэтому и обратился в JS силен.
#4 26 августа 2015 в 10:34
Проблема исходит из-за того, что на разных страницах textarea имеет разные идентификаторы, а автор поленился или не захотел эти самые идентификаторы определить и вместо этого передает в скрипт два вызова одной и той же функции, по принципу кто-то да сработает…

В приложении файлы для версии 1.10.6, для более ранних подправьте файл plugin.php
Прикрепленный файл
pbbmyfotoks_04bp6.zip 4 Кб
#5 26 августа 2015 в 10:52
Спасибо большое, протестирую, как сделаю, отпишусь и выложу результаты.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.