【问题标题】:jQuery - struggling with undefined variablejQuery - 与未定义的变量作斗争
【发布时间】:2012-11-15 19:57:28
【问题描述】:

我试过用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 和输入元素中的值。

通过此代码“var title = $(this).val();”,我能够从输入元素中获取数据,但属性值返回错误“未定义”

下面是返回错误的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>

【问题讨论】:

    标签: php jquery mysql ajax attr


    【解决方案1】:

    您从$(this).parent('ul') 请求data-itemid 属性,但您发布的第一个sn-p 中的属性位于&lt;li&gt; 元素上,而不是&lt;ul&gt; 上。

    编辑:仔细观察,input 也不是li 的直系后代。请改用closest()

    因此,如果您将 $(this).parent('li') 切换为 $(this).closest('li') 应该没问题。

    感谢@wirey 对closest() 的评论,我错误地建议parents()

    【讨论】:

    • @Chris 确实我错过了一个位置。仔细查看并更新,希望它会起作用。
    • .parents() 将选择所有li 父母以清除,因此如果您嵌套了ul,您将获得多个li,.closest() 可能会变得更好
    • @wirey 用信用更新了答案,但你先做对了,如果你想把它作为答案发布,我会把我的排除在外。
    • @Rick 不,没关系。根据他的例子,你有正确的答案,但只是说使用 .closest() 是最安全的:)
    • @Rick and wirey - 感谢您的帮助 - 您找到了问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    相关资源
    最近更新 更多