0

当我在 test1.php 上进行选择时,它会将值 onchange="showbookings(this.value) 传递给 test2.php,然后从 mysql 调用返回填充的 html 代码。所有这些都很完美。

我遇到的问题是类函数contactus 和status_button 在email.js 中根本不起作用。当我点击联系我们时......没有任何反应。当我单击 status_button 时,页面刷新回未选中的框。我正在寻找有关在做出选择并呈现 html 后如何让类函数工作的建议。

我有在另一个示例中工作的函数,而没有选择呈现 html,所以我知道它们可以工作。我只是不明白为什么他们不再使用选择。

<a id='email1' href='#' class='contactus'><img src='emailbutton.jpg' title='Email' border='0' height='24' width='24'></img></a>

<div id='messageA1'><a id='1' href='' class='status_button' title='C1'><div id='messageB1'><img src='closebutton.jpg' title='Order Status' border='0' height='24' width='24'></img></div></a></div>

test1.php

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

echo '<html>
<head>
    <link rel="stylesheet" href="booking.css" />
    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
    <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script src="email.js"></script>
</head>
<body>
<a href=""><img src="/images/logo.png" height="123" width="298"></a>
    <br/>
    <form style="width: 1100px">
        <select name="bookings" onchange="showbookings(this.value)">
            <option value="">Select Bookings To See:</option>
            <option value="1">All Booking</option>
            <option value="2">Open Bookings</option>
            <option value="3">Closed Bookings</option>
        </select>
    </form>
    <div id="txtBookings"></div>
</body>
</html>';
?>

运行test2.php,返回下面从mysql填写的html返回到

  <div id="txtBookings"></div> 

在 test1.php

<form id='form1' style='width: 1100px'>
    <table>
        <th>Id</th>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Email</th>
        <th>Phone</th>
        <th>Address</th>
        <th>City</th>
        <th>State</th>
        <th>Zip</th>
        <th>Adults</th>
        <th>Kids</th>
        <th>Pets</th>
        <tr>
            <td>
                <input type='text' id='id1' size='3' readonly='readonly' value='1'>
            </td>
            <td>
                <input type='text' id='fname1' size='8' value='Bob'>
            </td>
            <td>
                <input type='text' id='lname1' size='13' value='Smith'>
            </td>
            <td>
                <input type='text' id='email1' size='25' value='bobsmith@yahoo.com'>
            </td>
            <td>
                <input type='text' id='phone1' size='10' value='(555)-555-5555'>
            </td>
            <td>
                <input type='text' id='addy1' size='22' value='123 Main St'>
            </td>
            <td>
                <input type='text' id='city1' size='10' value='Anywhere'>
            </td>
            <td>
                <input type='text' id='state1' size='1' value='CA'>
            </td>
            <td>
                <input type='text' id='zip1' size='2' value='99999'>
            </td>
            <td>
                <input type='text' id='adults1' size='2' value='2'>
            </td>
            <td>
                <input type='text' id='kids1' size='1' value='0'>
            </td>
            <td>
                <input type='text' id='pet1' size='1' value='0'>
            </td>
        </tr>
    </table>
    <table>
        <th>Level</th>
        <th>Check In</th>
        <th>Check Out</th>
        <th>Booked</th>
        <tr>
            <td>
                <input type='text' id='level1' size='2' value='Upper'>
            </td>
            <td>
                <input type='text' id='chkin1' size='7' value='11/21/2013'>
            </td>
            <td>
                <input type='text' id='chkout1' size='7' value='11/24/2013'>
            </td>
            <td>
                <input type='text' id='booked1' size='7' value='10/02/2013'>
            </td>
            <td><a id='edit1' href='' class='edit_button' title=''><img src='editbutton.jpg' title='Submit Edit' border='0' height='24' width='24'></img></a>
            </td>
            <td><a id='email1' href='#' class='contactus'><img src='emailbutton.jpg' title='Email' border='0' height='24' width='24'></img></a>
            </td>
            <td>
                <div id='messageA1'><a id='1' href='' class='status_button' title='C1'><div id='messageB1'><img src='closebutton.jpg' title='Order Status' border='0' height='24' width='24'></img></div></a>
                </div>
            </td>
        </tr>
    </table>
</form>

电子邮件.js

$(document).ready(function () {
    $(".contactus").click (function () {
//    alert("email");
        var element = $(this);
        var J = element.attr("id");
        var email = document.getElementById(J).value;
        $("#result").html("<h3>Loading</h3>").css("display", "block");
        findCenter($("#result"));
        $.get("email.php?email=" + email, function (data) {
            $("#result").html(data);
            findCenter($("#result"));
            FocusOnInput();
            $("#snd").click(function () {
                var subject = document.getElementById("subject").value;
                var addy = document.getElementById("addy").value;
                var comments = document.getElementById("comments").value;
                $("#result").append("<br /><br /><div><i>Sending...</i></div>");
                $.post("email.php", {
                    mode: "snd",
                    subject: subject,
                    addy: addy,
                    comments: comments
                }, function (data) {
                    $("#result").html(data);
                    findCenter($("#result"));
                });
            });
            $("#cnx").click(function () {
                $.post("email.php", {
                    mode: "cnx"
                }, function (data) {
                    $("#result").html(data);
                    findCenter($("#result"));
                });
            });
        });
    });
});

$(document).ready(function () {

    $(".status_button").click (function () {
//    alert("status");
        var element = $(this);
        var I = element.attr("id");
        var id = $("#id" + I).val();
        var sname = $(this).attr("title");
        $.post("openclose.php", {
            id: id,
            sname: sname
        },

        function (data) {
            var response = (data).split(";", 3);
            $("#messageA" + I).innerhtml = (response[0]);
            $("#messageA" + I).hide();
            $("#messageA" + I).fadeIn(1500);
            $("#messageB" + I).html(response[1]);
            $("#messageB" + I).hide();
            $("#messageB" + I).fadeIn(1500);
            document.getElementById(I).value = (response[2]);
            document.getElementById(I).title = (response[2] + I);
        });
        return false;
    });
});


function showbookings(str) {
    if (str === "") {
        document.getElementById("txtBookings").innerHTML = "";
        return;
    }
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else { // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById("txtBookings").innerHTML = xmlhttp.responseText;
        }
    };
    xmlhttp.open("GET", "test2.php?q=" + str, true);
    xmlhttp.send();
}
4

3 回答 3

1

像这样绑定您的点击事件处理程序,使用委托事件处理程序,以便它们适用于动态生成的 HTML 元素:

$('body').on('click', '.status_button', function () {
   // your code here
};

您拥有它的方式(与 just 绑定$(".status_button").click(...)),当绑定 click 事件处理程序时元素还不存在,这就是它不起作用的原因。委托表单中的on()方法甚至对于绑定处理程序时尚未创建的元素也有效。

.status_button为了获得更好的性能,您还可以将其附加到在绑定事件时已经存在的最近的祖先(替换'body'为该祖先的选择器)。

从文档(向下到委派的事件处理程序):

当提供选择器时,事件处理程序被称为委托。当事件直接发生在绑定元素上时,不会调用处理程序,而只会调用与选择器匹配的后代(内部元素)。jQuery 将事件从事件目标冒泡到附加处理程序的元素(即,从最内到最外的元素),并为沿该路径匹配选择器的任何元素运行处理程序。

http://api.jquery.com/on/

于 2013-10-16T22:24:08.430 回答
0

加载动态内容后,您需要重新附加单击事件侦听器。绑定仅发生在附加侦听器时页面上已经存在的元素上。调用后,侦听器不会附加到添加到 DOM 的元素on()

进行 ajax 调用后,您需要$(".status_button").on('click',function(){....});将 click 事件绑定到任何新.status_button元素。

来自 jQuery 文档on()

事件处理程序仅绑定到当前选定的元素;当您的代码调用 .on() 时,它们必须存在于页面上。

于 2013-10-16T23:20:32.243 回答
0

我接受了建议并将功能添加到一起。以下是我所做的。所有功能都按应有的方式工作。

function showbookings(str) {
    if (str === "") {
        document.getElementById("txtBookings").innerHTML = "";
        return;
    }
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else { // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById("txtBookings").innerHTML = xmlhttp.responseText;

       $(".contactus").on('click', function () {
        var element = $(this);
        var J = element.attr("id");
        var email = document.getElementById(J).value;
        $("#result").html("<h3>Loading</h3>").css("display", "block");
        findCenter($("#result"));
        $.get("email.php?email=" + email, function (data) {
            $("#result").html(data);
            findCenter($("#result"));
            FocusOnInput();
            $("#snd").click(function () {
                var subject = document.getElementById("subject").value;
                var addy = document.getElementById("addy").value;
                var comments = document.getElementById("comments").value;
                $("#result").append("<br /><br /><div><i>Sending...</i></div>");
                $.post("email.php", {
                    mode: "snd",
                    subject: subject,
                    addy: addy,
                    comments: comments
                }, function (data) {
                    $("#result").html(data);
                    findCenter($("#result"));
                });
            });
            $("#cnx").click(function () {
                $.post("email.php", {
                    mode: "cnx"
                }, function (data) {
                    $("#result").html(data);
                    findCenter($("#result"));
                });
            });
        });
    });
    $(".status_button").on('click', function () {
        var element = $(this);
        var I = element.attr("id");
        var id = $("#id" + I).val();
        var sname = $(this).attr("title");
        $.post("openclose.php", {
            id: id,
            sname: sname
        },
        function (data) {
            var response = (data).split(";", 3);
            $("#messageA" + I).innerhtml = (response[0]);
            $("#messageA" + I).hide();
            $("#messageA" + I).fadeIn(1500);
            $("#messageB" + I).html(response[1]);
            $("#messageB" + I).hide();
            $("#messageB" + I).fadeIn(1500);
            document.getElementById(I).value = (response[2]);
            document.getElementById(I).title = (response[2] + I);
        });
        return false;
    });
        }
    };
    xmlhttp.open("GET", "test2.php?q=" + str, true);
    xmlhttp.send();
}
于 2013-10-17T17:48:46.173 回答