【问题标题】:AJAX form executed by onblur OR change event由 onblur 或更改事件执行的 AJAX 表单
【发布时间】:2012-06-15 18:07:59
【问题描述】:

我有一个表单,用户可以在其中输入一个数字到文本字段中。然后,从下拉菜单中选择另一个数字。我希望 AJAX 在每次从一个字段到另一个字段时执行。这样它就可以实时进行计算。

我想文本字段将使用“onblur”,下拉菜单使用“change”或“onchange”......但是我如何编写脚本来根据它们当前所在的字段来执行?你能把它设置成两者都做吗?

编辑:使用新变量标签的新尝试。

    <script type="text/javascript">
        function postData(){
            var widthX = $('#width_str').val();
            var heightX = $('#height_str').val();
            var prodidX = $('#prodid').val();
            var roomX = $('#room_str').val();

            $.post('db_query.php',{widthX:widthX, heightX:heightX, prodidX:prodidX, roomX:roomX},   
                function(data){
                $("#search_results").html(data);
            });
        }

        $(function() {
            $("#lets_search").bind('submit',function() {postData()});
            $("#room_str").bind('change', function() {postData()});
            $("#width_str").bind('change', function() {postData()});
            $("#height_str").bind('change',function() {postData()});
        });
    </script>

这里是表格的一部分......

         <form id="lets_search" action="" style="width:400px;margin:0 auto;text-align:left;">
            <input type="hidden" value="1" value="<?php echo stripslashes($_GET['prodid']); ?>" name="prodid" id="prodid">

            room name:
            <select name="room_str" id="room_str">
                <option value="Dining">Dining</option>
                <option value="Bathroom">Bathroom</option>
                <option value="Kitchen">Kitchen</option>
            </select>
            height:
            <select name="height_str" id="height_str">
                <option value="30">30"</option>
                <option value="31">31"</option>
                <option value="32">32"</option>
                <option value="33">33"</option>
                <option value="34">34"</option>
                <option value="35">35"</option>
                <option value="36">36"</option>
                <option value="37">37"</option>
            </select>
            <br>
            width:
            <select name="width_str" id="width_str">
                <option value="30">30"</option>
                <option value="31">31"</option>
                <option value="32">32"</option>
                <option value="33">33"</option>
                <option value="34">34"</option>
                <option value="35">35"</option>
                <option value="36">36"</option>
                <option value="37">37"</option>
            </select>
            <input type="submit" value="send" name="send" id="send">
         </form>

处理数据的php页面...

<?php
include('db_pbconnection.php');

$tax = .06;
$tax2 = 1.06;
$grandtotal = 50;   

$query = mysql_query(" SELECT * FROM price_dimensions WHERE prodid = '".$_POST['prodidX']."' AND height >= '".$_POST['heightX']."' AND width >= '".$_POST['widthX']."' ORDER BY height ASC, width ASC LIMIT 1 ");
echo '<div>';
while ($data = mysql_fetch_array($query)) {
    echo '
    <div style="background-color:pink;">
        <div style="clear:both; font-size:18px;">height: '.$data["height"].'</div><br>
        <div style="clear:both; font-size:18px;">width: '.$data["width"].'</div>
        <div style="clear:both; font-size:18px;">unit price: '.$data["price"].'</div>
        <div style="clear:both; font-size:18px;">tax: '.(($data["price"])*($tax)).'</div>
        <div style="clear:both; font-size:18px;">grand total:'.(($data["price"])*($tax2)).'</div>
    </div>';
}
echo '</div>';
?>

【问题讨论】:

    标签: ajax onchange onblur


    【解决方案1】:

    如果我理解正确,您可以通过将代码移动到单独的函数并将任何事件绑定到该函数来从任何区域调用 AJAX。

    function postData(){
        var value = $('#str').val();
        var valueH = $('#strH').val();
        var prodid = $('#prodid').val();
    
        $.post('db_query.php',{valueH:valueH, value:value, prodid:prodid},   
            function(data){
            $("#search_results").html(data);
        });
        return false;
    }
    
    $(function() {
        $("#lets_search").bind('submit',function() {postData()});
        $("#strH").bind('change', function() {postData()});
        $("#str").bind('blur',function() {postData()});
    });
    

    【讨论】:

    • 哦,我明白了。因此,在该底部区域,您可以添加任何类型的“触发器”(如果这是术语),并且根据用户单击或执行的操作,它会使用相应的代码片段来触发它......即提交=按钮...更改=下拉...模糊=文本字段。对吗?
    • 您可以在下部区域有无限数量的行,将postData() 函数分配给各种事件(例如下拉更改、文本模糊等)。此时,页面正在监听这些事件的发生,并在发生时调用该函数。 “提交”、“更改”、“模糊”只是事件的类型。例如,您可以有多个“更改”事件,或者将文本框的“模糊”更改为“更改”,而不会发生意外。这只是您要订阅的事件。
    • 这很有意义。但它不起作用。我的语法可能是错误的,因为我更改了变量名。我将在上面进行编辑并展示我是如何更改它的。
    • 在您的新示例中,您绑定了#roomX#widthX 等,看起来您应该绑定#room_str#width_str 等。这应该可以解决问题。我使用一个简单的警报函数而不是 jQuery 在本地对其进行了测试,并且它适用于该更改。
    猜你喜欢
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    相关资源
    最近更新 更多