Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自php的按钮回显不起作用_Php_Jquery_Ajax - Fatal编程技术网

来自php的按钮回显不起作用

来自php的按钮回显不起作用,php,jquery,ajax,Php,Jquery,Ajax,使用jqueryajax,我从b.php调用一个数据,这是一个按钮 echo'点击!'; $.ajax({ 键入:“获取”, 网址:“b.php”, 数据类型:“html”, 成功:功能(数据){ $(“#txt”).append(数据); } }); $(“#btn”)。单击(函数(){ 警报($(“#btn”).val()); }); 问题是每当我单击按钮时,警报不会显示。当浏览器执行此行时 $("#btn").click(function(){ 页面中没有id=btn的元素。因此,$

使用jqueryajax,我从b.php调用一个数据,这是一个按钮

echo'点击!';
$.ajax({
键入:“获取”,
网址:“b.php”,
数据类型:“html”,
成功:功能(数据){
$(“#txt”).append(数据);
}
});
$(“#btn”)。单击(函数(){
警报($(“#btn”).val());
});

问题是每当我单击按钮时,警报不会显示。

当浏览器执行此行时

$("#btn").click(function(){
页面中没有id=btn的元素。因此,
$(“#btn”)
返回一个空集,实际上什么也没有发生

每次向页面添加按钮时,都必须调用click函数

$.ajax({
    type: "GET",
    url: "b.php",
    dataType: "html",
    success: function(data){
        $("#txt").append(data);
        $("#btn").click(function(){
            alert($("#btn").val());
        });
    }
});

尝试使用属性获取值

alert($("#btn").attr("value"));

在调用AJAX之前,将绑定onclick事件。我知道这是在代码中的那一部分之后,但是对于AJAX调用,这并不能保证它会按照这个顺序发生


您需要在AJAX调用成功时(以及将元素添加到DOM中后)绑定click事件。

使用属性获取
值:

$("#btn").click(function(){
   alert($("#btn").attr("value"));
});

事件处理程序绑定到现有元素。尝试绑定处理程序时,您的id=“btn”元素不存在。
但您可以使用委托事件处理程序。也就是说,您将处理程序绑定到一个已经存在的元素,并让它为子元素“过滤”出事件(可能稍后添加)

由于您是基于id绑定事件的,因此只能存在一个这样的元素,因此这种技术可能看起来不太有用。但它的工作原理与您将其绑定到一类元素时相同,例如

<!DOCTYPE html >
<html>
    <head>
        <title>...</title>
    </head>
    <body>
        <div id="buttondiv">
        </div>
        <button id="addbutton"></button>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
        <script>
            (function() {
                var btncnt = 0;

                // only binding the event handler once
                // on the existing div wrapping the buttons
                // and "waiting" for click-events on descandant button.somebutton elements
                $("#buttondiv").on("click", "button.somebutton", function() {
                    alert( $(this).val() );
                });

                // and it will fire regardless
                // of how many such buttons are added by this:
                $("#addbutton").click( function() {
                    var btn = $("<button></button>");
                    btn.val(++btncnt);
                    btn.addClass("somebutton");
                    btn.append("click me");
                    $("#buttondiv").append(btn);
                });
                $("#addbutton").append("add button");
            })();
        </script>
    </body>
</html>

...
(功能(){
var btncnt=0;
//仅绑定事件处理程序一次
//在现有div上包装按钮
//和“等待”DescandButton.somebutton元素上的单击事件
$(“#buttondiv”)。在(“单击”、“按钮.somebutton”函数()上{
警报($(this.val());
});
//无论如何它都会开火
//此按钮添加了多少个此类按钮:
$(“#添加按钮”)。单击(函数(){
var btn=$(“”);
btn.val(++btncnt);
btn.addClass(“somebutton”);
附加(“点击我”);
$(“#buttondiv”)。追加(btn);
});
$(“#添加按钮”).append(“添加按钮”);
})();

如果您使用的是jQuery 1.7xxx,则必须像这样绑定该事件:

$("#btn").live('click',function(e){
    e.preventDefault() //prevent default the event  
    alert($("#btn").val());
});
如果您正在使用greator,那么1.7xx版本的jQuery将使用:

$('body').on('#btn',function(){
    e.preventDefault() //prevent default the event  
    alert($("#btn").val());
});

确保在文档准备就绪时添加此代码。

“jQuery 1.7xxx”应该是“jQuery低于1.7”,不是吗?“greator then 1.7xx”可以简单地表示为“1.7+”(顺便说一下,包括1.7)。1.7+示例中不存在变量
e
。顺便问一下,为什么要使用
$(“#btn”).val()
而不是
$(this).val()
?因为ID是唯一的,所以没有意义,如果您使用的是类,那么应该使用
$(this)将其引用到当前对象
所以您假设,当您可以从
this
中获取这个DOM元素时,通过DOM搜索具有所需ID的元素是有意义的?若有人把你们的手机给了你们,你们会把手机放在桌子上,然后开始在整个家里搜索它吗?这有意义吗?不要忘记,如果您将来两次使用此Ajax请求,您将在元素
#btn
上获得两个单击事件处理程序。
$('body').on('#btn',function(){
    e.preventDefault() //prevent default the event  
    alert($("#btn").val());
});