Форум программистов, компьютерный форум CyberForum.ru
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация
 
henry007
Новичок
0 / 0 / 0
Регистрация: 21.05.2013
Сообщений: 4
17.06.2013, 12:28     Обработчик событий   #1
Есть простая форма а точнее даже таблица в 3 колонки в центральной колонке есть textarea чуть ниже есть чекбокс который дает возможность создать tr с 3 колонками если отмечен и с 2 если не отмечен, и кнопка для отправки через ajax всего этого дела, работаю с live проблема в том, что чекбоксы которые загружаются через ajax абсолютно не меняют значения, что они отмечены что нет, получаю undefined если самый первый, созданный заранее checkbox отмечен и соответственно checked если отмечен.
Код:
Код PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?   
    if ($_POST['check']=="undefined") {
        $a =    "<tr><td style='border: 1px solid black;'></td>".
                "<td style='border: 1px solid black;'><textarea class='inputtextarea' name='form_textarea_86'></textarea>".
                "<a id='addst8' href='#' >"."+"."</a></td>".
                "</tr>";
        echo json_encode(array('a' => $a));
    }
    else{
        $a =    "<tr><td style='border: 1px solid black;'></td>".
                "<td style='border: 1px solid black;'><textarea class='inputtextarea' name='form_textarea_86'></textarea>".
                "<a id='addst8' href='#' >"."+"."</a></td>".
                "<td style='border: 1px solid black;'></td></tr>";
        echo json_encode(array('a' => $a));
    }
    
?>
Код JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script>  
        $(document).ready(function(){
            $('#addst8').live("click",function(){  
                $.ajax({  
                    type: "POST",  
                    url: "array.php",
                    dataType: "json",
                    data: "check="+$("#check").attr("checked"),
                    success: function(data){
                        alert($("#check").attr("checked"));
                        $("#st8 tr:last-child").after(data.a);
                    }  
                });  
                return false;  
            });
              
        });  
</script>
И сам шаблон таблички
Код HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
<table width="100%" border="0" style="border-collapse: collapse;" id="st8"> 
  <tbody> 
    <tr><td align="center" style="border: 1px solid black;"> 
        <h4 align="center"><b>№ статьи</b></h4>
       </td><td align="center" style="border: 1px solid black;"> 
        <h4><b>Наименование статьи</b></h4>
       </td><td style="border: 1px solid black;"> 
        <h4 align="left"><b>Документ</b></h4>
       </td></tr>
   
    <tr><td style="border: 1px solid black;"><b>Ст. 8</b></td><td style="border-image: none;" colspan="2"> 
        <br />
       <b>В рамках общей информации об управляющей организации раскрытию подлежат следующие сведения:</b></td></tr>
   
    <tr><td valign="top" style="border: 1px solid black;"></td>         <td valign="top" style="border: 1px solid black;"><?=$FORM->ShowInput('st8')?><a id="addst8" href="#" >+</a> 
        <br />
       Отдельное поле для файла ?<input type="checkbox" id="check" /></td>   <td valign="top" style="border: 1px solid black;" colspan="1" id="row"></td></tr>
   </tbody>
 </table>
<br />
 <?=$FORM->ShowSubmitButton("Сохранить","Сохранить")?> <?=$FORM->ShowApplyButton("","")?>
AdAgent
Объявления
17.06.2013, 12:28    Обработчик событий
Soldado
Форумчанин
720 / 711 / 4
Регистрация: 28.06.2012
Сообщений: 1,318
Записей в блоге: 4
17.06.2013, 15:15     Обработчик событий   #2
Неправильно использовать один и тот же id несколько раз - id='addst8'. Заменяйте на класс и элементы ищите относительно кликнутого элемента.
Пора отказываться от метода live как устаревшего (начиная с jQuery 1.9 - не поддерживается). Используйте on делегированно для привязки событий к новым элементам. Правильно будет таблице задать свой id, например, "#table" тогда
Код JavaScript
1
$('#table').on("click",".faddst8", function(){ 
Для динамических (изменяемых) атрибутов лучше использовать не attr, а pop
Лучше отказаться от undefined. Проверяйте отмеченность так
Код JavaScript
1
2
3
4
5
if ($("#check").is(":checked")) {
var attrV=1;
else{
var attrV=0;
}
и в ajax передавайте переменную attrV
Код JavaScript
1
data: "check="+attrV,
}
В PHP соответственно проверяйте 0 или 1

да и зачем два раза писать
Код PHP
1
echo json_encode(array('a' => $a));
ведь в любом случае массив отправляете, вынесите его из условий
Donald28
странник
737 / 419 / 18
Регистрация: 28.05.2012
Сообщений: 1,321
Записей в блоге: 2
17.06.2013, 15:23     Обработчик событий   #3
потому что сначала jQuery события привязываются к элементам, которые уже созданы на странице. На динамически добавленные элементы эти события уже на распространяются. Т.е. их надо объявлять заново.
Yandex
Объявления
17.06.2013, 15:23    Обработчик событий
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему
Опции темы

Текущее время: 13:29. Часовой пояс GMT +4.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.