0

jqueryでhtmlタグの属性値を取得しようとしました。

    $query = "SELECT * FROM frontpage_modules";
        mysql_query("SET NAMES 'utf8'");
        $result = mysql_query($query) or (mysql_error());
        while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
            $list[] = $row['module_name'];
            $name[] = $row['name'];
            $img[] = $row['img'];
            $link[] = $row['link'];
            $module_content[] = $row['module_content'];
        }
    ?>


  <form action="ChangeFrontpageModule.php" method="post">  
   <ul id="gallery">
            <?php

                for ($idx = 0; $idx < count($list); $idx+=1) {
                    echo "<li data-itemid='" . $idx . "'>";
                    echo "<div class='drag_div'>";


                    echo '<div class="kundeutsagn">';
                    echo '<img src="http://www.amedisin.no/pictures/artikler/'.$img[$idx].'" alt="Top5"  title="Top5" />';
                    echo '<div class="statement_top">';
                    echo '<h5>'.$name[$idx].'</h5>';
                    echo "<input type='text' name='title' value='".$name[$idx]."' />";
                    echo $module_content[$idx];
                    echo '</div></div>';


                    echo "</div>";
                    echo "</li>";
                }
            ?>
        </ul>
    </form> 

data-itemid(li内)に格納されているIDとinput要素の値を渡そうとしています。

このコード「vartitle=$(this).val();」を使用して入力要素からデータを取得できますが、属性値は「undefined」というエラーを返します。

以下はエラーを返すjqueryスクリプトです

   <script>
        $(function() {
    $('h5').click(function() {
        $(this).slideUp().next('input').slideDown();
    });
    $('ul#gallery input').change(function() {
        var id = $(this).parent('li').attr('data-itemid');
        var thisParam = $(this);
        var title = $(this).val();
        $.ajax({
            type: 'POST',
            url: 'JavaScript/ChangeFrontpageModule.php',
            data: 'title=' + title + '&id=' + id,
            success: function(response) {
                $('input').slideUp();
                $(thisParam).prev('h5').text(title).slideDown();
                $('#response').fadeIn(1000).empty().append(response).prepend('<span id="x">X</span>');
                $('span#x').click(function() {
                    $('div#response').fadeOut('slow');
                });
            }
        });
    });
});
        </script>
4

1 に答える 1

2

data-itemidから属性を求めています$(this).parent('ul')が、投稿した最初のスニペットの属性は<li>要素ではなく、要素にあり<ul>ます。

編集:よく見ると、inputも の直接の子孫ではありませんli。代わりにclosest()を使用してください。

だから切り替えれば$(this).parent('li')大丈夫$(this).closest('li')

に対する@wireyのコメントの功績closest()、私は誤って提案しましたparents()

于 2012-11-15T20:06:02.440 に答える