【问题标题】:Grab Value of Second Term using jQuery UI Autocomplete使用 jQuery UI 自动完成获取第二学期的价值
【发布时间】:2012-03-27 02:56:36
【问题描述】:

感谢@ManselUK 的回复

修复了这部分查找值(下)

但是,当我SELECT一个值时,它并没有设置隐藏元素的值,为什么不呢?

我收到错误:Uncaught TypeError: Cannot set property 'value' of null 当我从 autocomplete.. 中选择一个值时

输入5个字符调用的php代码:

   try{

        $occupation = mysql_real_escape_string($_GET['term2']); //////
        echo 'term 2 '. $occupation;
        ///////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////////
        $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
        $sth = $dbh->prepare(
        'SELECT occupID, occupVal From Occupation WHERE occupVal = ?');
        $sth->bindParam(1, $occupation);
        $sth->execute();
        $jsonArray = array();
        while ($result = $sth->fetch(PDO::FETCH_ASSOC)) {
         $jsonArray[] = array(
              'label' => $result['occupVal'], 
              'value' => $result['occupVal']."|".$result['occupID']); 
        }

        print json_encode($jsonArray); // json encode that array
    } // try   

catch{} 代码块会将错误发送到文件,但该文件中没有错误。

HTML 表单输入:

<label for="occup">What is your occupation? <br /></label>
                            <div class="ui-widget">
                                <input id="occup" type="text"  name="term2" value="e.g. Carpenter, Developer, etc" onFocus="clearText(this)" /><br />
                                <input type="hidden" id="actualOccup" name="actualOccupval" value="" />

输入内容时调用的JS:

    <script type="text/javascript">
    $(document).ready(function()
    {
        // Zipcode Field
        $('input#zip').autocomplete({

            dataType: "json",
            source: "../src/php/registration/getFanLoc.php",
            minLength: 4,
            select: function(event, args){
                event.preventDefault();
                var joinedValues = args.item.value;
                var id = joinedValues.split("|")[0];
                var cityAndState= joinedValues.split("|")[1];
                document.getElementById('actualZip').value = cityAndState ; 
                document.getElementById('zip').value = id;
            }
        });
        // Occupation Field
        $('input#occup').autocomplete({
        source: function(request, response) {
        $.getJSON("../src/php/registration/getFanOccupation.php", { term2: request.term }, response);
        },
        minLength: 5,
        select: function(event, args){
        event.preventDefault();
        var joinedValues = args.item.value;
        var id = joinedValues.split("|")[0];
        var occupValAndId= joinedValues.split("|")[1];
        $('#actualOccupval').val(occupValAndId); 
        $('#occup').val(id);
    }
});
    });
    </script>

我尝试过调试: - 检查此文件的错误日志。 (没有错误) - 检查SELECT 查询,数据库中occupVal 的值是一个VARCHAR,在SQL 中通过执行occupVal = 'some val here'; 找到值jQuery 是否需要这些引号? - 如果我直接访问getFanOccupation.php?term2=Computer Programmer,它会输出:term 2 Computer Programmer[{"label":"Computer Programmer","value":"Computer Programmer|183"}] - 这是正确的,问题是如果我得到Computer Programmer值并直接粘贴到输入中,或者甚至开始写它,它

固定 JS: - 此代码有效,为职业选择了错误 ID,这就是它没有显示隐藏表单字段值的原因

    $(document).ready(function()
    {
        // Zipcode Field
        $('input#zip').autocomplete({

            dataType: "json",
            source: "file1.php",
            minLength: 4,
            select: function(event, args){
                event.preventDefault();
                var joinedValues = args.item.value;
                var id = joinedValues.split("|")[0];
                var cityAndState= joinedValues.split("|")[1];
                document.getElementById('actualZip').value = cityAndState ; 
                document.getElementById('zip').value = id;
            }
        });
        // Occupation Field
        $('input#occup').autocomplete({
            source: function(request, response) {
                $.getJSON("file.php", { term2: request.term }, response);
            },
            minLength: 5,
            select: function(event, args){
                event.preventDefault();
                var joinedValues = args.item.value;
                var id = joinedValues.split("|")[0];
                var occupValAndId= joinedValues.split("|")[1];
                $('#actualOccup').val(occupValAndId); 
                $('#occup').val(id);
            }
        });
});

【问题讨论】:

    标签: php jquery jquery-ui jquery-autocomplete


    【解决方案1】:

    使用这个:

    source: function(request, response) {
       $.getJSON("../src/php/registration/getFanOccupation.php", { term2: request.term }, response);
    }
    

    在第二个autocomplete。 Docs for $.getJSON() here

    来自文档:

    一个请求对象,具有一个名为“term”的属性,它指的是 到文本输入中当前的值。例如,当用户 在城市字段中输入“new yo”,自动完成项将等于 “新哟”。

    完整代码:

    $('input#occup').autocomplete({
        source: function(request, response) {
           $.getJSON("../src/php/registration/getFanOccupation.php", { term2: request.term }, response);
        },
        minLength: 4,
        select: function(event, args){
            event.preventDefault();
            var joinedValues = args.item.value;
            var id = joinedValues.split("|")[0];
            var occupValAndId= joinedValues.split("|")[1];
            $('#actualOccupval').val(occupValAndId); 
            $('#occup').val(id);
        }
    });
    

    注意还将document.getElementById('blah').value = 更改为$('#blah').val(),因为您已经在使用jQuery ...docs for the val() method here

    【讨论】:

    • @ManselUK - 我已经更新了我的代码,例如在输入 Casino 之类的单词时它不会输出任何内容。您介意查看我已采取的错误检查步骤并修改您的答案吗?我真的很感激它
    • 出色的工作,能够自己调试。谢谢@ManseUK!
    猜你喜欢
    • 2016-09-15
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 2018-01-18
    相关资源
    最近更新 更多