2

.net 开发人员试图为朋友做一个 php 站点,到目前为止一切都很好,但我想知道 php 是否有类似 textchanged 事件的东西。这是我想要做的,我希望根据用户在上面的文本框中输入的内容附加一个从数据库中检索的数据的下拉框(使用文本框中的文本作为参数从数据库中检索数据和将其附加到下拉列表而不重新加载整个页面。)

  protected void TextBox1_TextChanged(object sender, EventArgs e)
    {
        //Do stuff
    }

上面的代码块在 asp.net 中,但我想在 php 中实现类似的东西。

4

5 回答 5

2

这不是 php 的工作方式。但是您可以使用 jquery 进行这样的 ajax 调用:

<?php

    //array, object or db result you use to fill your dropdown
    $array = array('pipo', 'kees', 'klaas', 'klaas1', 'jan', 'meneerje', 'poep', 'hessel', 'kaas', 'ietsandersd', 'smit', 'cowoy', 'nog zo iets');

    //if we want to search we search and only return the new found options
    if(isset($_REQUEST['keyword'])){
        $new_array = array();
        foreach($array as $value){
            if(strpos($value, $_REQUEST['keyword']) !== false){
                $new_array[] = $value;
            }
        }
    }
    else{
        $new_array = $array;
    }

    $options = '';
    foreach($new_array as $key => $option){
        $options .= "<option value='$key'>$option</option>";  
    }
    $selectbox = "<select name='selectbox' id='drop_down'>$options</select>";

    if(isset($_REQUEST['keyword'])){
        echo $options;
    }
    else{
        // with the \ we escape the "
        echo "<html>
                <head>
                    <title>ajax selectbox</title>
                    <script src=\"http://code.jquery.com/jquery-latest.min.js\" type=\"text/javascript\"></script>
                    <script type=\"text/javascript\">
                        $(document).ready(function () {
                            $('body').on('keyup', '.search', function(){
                                 var data = $('.search').serialize();
                                 $.post('ajax_selectbox.php', data, function (data){   
                                    $('#drop_down').html(data);
                                });
                            });
                        });
                    </script>
                </head>
                <body>
                    <input type='text' name='keyword' class='search' />
                    $selectbox
                </body>
                </html>
             ";
    }

?>

解释:

java脚本,首先我们包含在线jquery库,您也可以从自己的Web服务器下载该库并包含它。

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script type="text/javascript">
    // first we wait unit the html page is loaded
    $(document).ready(function () {
        //then we wait for a keyup event in the element with class="search" we use the css sector . for classes like .search
        $('body').on('keyup', '.search', function(){
            //when we type inside the .search textbox we serialize the element like a form would do. this takes the name and the value and puts it in a array.
            var data = $('.search').serialize();
            // then we post with ajax back to our php file or an other php file. its you own decision. the data variable is the serialized data form .search
            $.post('ajax_selectbox.php', data, function (data){
                // at least we use a calback for when the ajax event has finnest and we use the jquery html function to put the new options inside the drobbox with id="drop_down". we use the css id selector # to select the select box.   
                $('#drop_down').html(data);
            });
        });
    });
</script>

请注意,我使用 jquery(并且网络上的许多大型玩家都使用 jquery),如果您知道一点 java 脚本,那么语法可能会令人不安。

在 jquery 中,我们有大量可以直接使用的方法,例如: $.post(); 如果您想使用从该函数返回的数据,我们创建一个回调函数,例如:

$.post( function(param_ returned_by_parent_function){
    //do stuf
});

使用 jquery 的另一种方式,这实际上是它背后的想法是查询一个 html 元素,然后像这样用它做一些事情。

$('html_element_query').do_something_with_this();

当然这只是一个基本的基本解释,但也许你明白了。

于 2013-05-03T12:31:51.377 回答
1

您可以使用 javascript onChange 处理程序并通过 AJAX 将当前值发送到 php

https://developer.mozilla.org/en/docs/DOM/element.onchange
http://www.w3schools.com/ajax/

于 2013-05-03T12:22:02.040 回答
1

PHP 不知道客户端会发生什么。如果您希望客户端上的某些事件触发操作,您必须自己编写代码(通常在 JavaScript 中)。

于 2013-05-03T12:22:33.680 回答
1

PHP 本身不知道前端发生的事件。但是,您可以通过混合使用 Ajax 和 PHP 来插入功能(种类)。Ajax 将监视事件,PHP 将处理从该 Ajax 发送给它的数据。

我建议使用 jQuery 并查看http://api.jquery.com/Ajax_Events/

于 2013-05-03T12:23:25.103 回答
0

我为自己制作了一个非常简单的PHP Event Dispatcher,它是可测试的,并且已在我的网站上使用。有需要的可以看一下。

于 2015-06-14T16:01:47.493 回答