jQuery脚本无法处理从另一页

时间:2016-07-04 02:44:34

标签: javascript jquery html

我已经提到了这些答案,但这并没有解决:

jQuery on button click not working after append

Jquery click event not working after append method

我想在页面加载时加载html for click按钮,如下所示:(这显示了带有css的html,但脚本无效)

$.get( "/plugins/system/conversekit/conver/test.php", function( data ) {
       $('body').append(data);
    }, "html" );

但是如果我以这种方式加载html脚本可以工作:

$('body').append('<div id="ckit" class="layout-compact is-hiddenx"\
     data-ckit-compact style=""><a href="javascript:void(0);"\
      class="btn-toggle-ckit" data-ckit-toggle-on><i class="fa fa-comment-o">\
      </i></a></div><div id="ckit" class="layout-full is-hidden disable-scrolling" data-ckit-full>\
      <iframe src="/plugins/system/conver/conver/full-view-contact.php" data-ckit-iframe id="ckit-full-view" \
      name="ckit-full-view" scrolling="no" frameborder="0"allowtransparency="true" \
      style="position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; width: 100%; height: 100%; border: 0px; padding: 0px; \
      margin: 0px; float: none; background: none;"></iframe></div>');

SCRIPT:

var toggleCkitOn = $('[data-ckit-toggle-on]');
 toggleCkitOn.on('click', function(e) {
            $(ckitFull).removeClass("is-hidden");
            $(ckitCompact).addClass("is-hidden");
            $('body').addClass("disable-scrolling");
            $("html").css({"height": "100%", "overflow": "hidden"});
            $("body").css({"position": "relative"});
            e.preventDefault();
        });

HTML

<div id="ckit" class="layout-compact is-hiddenx" data-ckit-compact style="">
    <a href="javascript:void(0);" class="btn-toggle-ckit" data-ckit-toggle-on><i class="fa fa-comment-o"></i></a>
</div>

<div id="ckit" class="layout-full is-hidden disable-scrolling" data-ckit-full>
    <iframe src="conver/full-view-contact.php" data-ckit-iframe id="ckit-full-view" name="ckit-full-view" scrolling="no" frameborder="0" allowtransparency="true" style="position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; width: 100%; height: 100%; border: 0px; padding: 0px; margin: 0px; float: none; background: none;"></iframe>
</div>

我试图避开代表团,但没有帮助,

$('body').on('click',toggleCkitOn, function(e) {...});

尝试使用其他承诺来检查ajax是否正常运行,并且我得到了以下所有内容,并且没有错误地执行:

1)成功 2)第二次成功 3)完成

 var jqxhr = $.get( "/plugins/system/conversekit/conversekit/test.php", function() {
          alert( "success" );
        })
          .done(function() {
            alert( "second success" );
          })
          .fail(function() {
            alert( "error" );
          })
          .always(function() {
            alert( "finished" );
          });

enter image description here

工作答案(但我希望变量是全局范围,在此函数之外声明它们会使点击不起作用):

$("body").on("click", ".btn-toggle-ckit", function(e) { 
            var toggleCkitOn = $('[data-ckit-toggle-on]');
            var ckitFull = $('[data-ckit-full]');
            var ckitCompact = $('[data-ckit-compact]');
            var ckitIframe = $('[data-ckit-iframe]');
             $(ckitFull).removeClass("is-hidden");
             $(ckitCompact).addClass("is-hidden");
             $('body').addClass("disable-scrolling");
             $("html").css({"height": "100%", "overflow": "hidden"});
             $("body").css({"position": "relative"});
             e.preventDefault();
        } );

4 个答案:

答案 0 :(得分:0)

function ckitDelegate() {
var toggleCkitOn = $('[data-ckit-toggle-on]');
 toggleCkitOn.on('click', function(e) {
            $(ckitFull).removeClass("is-hidden");
            $(ckitCompact).addClass("is-hidden");
            $('body').addClass("disable-scrolling");
            $("html").css({"height": "100%", "overflow": "hidden"});
            $("body").css({"position": "relative"});
            e.preventDefault();
        });
};

$.get("/plugins/system/conversekit/conver/test.php", function( data ) {
       $('body').append(data);
       ckitDelegate();
}, "html").fail(function() {
alert( "error" );
});

这是我的最后一个意见,如果它也不起作用我会放弃:

$.get("/plugins/system/conversekit/conver/test.php", function( data ) {
  $('body').append(data);
  setTimeout(function(){ ckitDelegate(); }, 500);
}, "html");

答案 1 :(得分:0)

请试试这个。在一个函数中添加click事件,并在DOM加载和追加操作之后调用该函数。像这样:

  function Init(){
 toggleCkitOn.on('click', function(e) {});
}

$(document).ready(function(){
Init();
});

$.get( "/plugins/system/conversekit/conver/test.php", function( data ) {
       $('body').append(data);
    Init();
    }, "html" );
  

确保在调用它们之前定义了Init()

答案 2 :(得分:0)

您的问题是,iframe隐藏了$(&#39; [data-ckit-toggle-on]&#39;)并因此阻止了任何点击事件 - 即点击事件未被触发,因为您单击iframe,而不是a href。

如果您删除iframe(暂时 - 一次解决一个问题),然后再试一次,它至少应该触发点击事件。

右键单击DOM中的$(&#39; [data-ckit-toggle-on]&#39;)元素,然后点击&#34; Inspect element&#34;看它是否可见。

修改

试试这个:

$.get("plugins/system/conversekit/conver/test.php",
    function(data) { $('body').append(data); },
        "html").then(function(data) {
        var toggleCkitOn = $('[data-ckit-toggle-on]');
        var ckitFull = $('[data-ckit-full]');
        var ckitCompact = $('[data-ckit-compact]');
        var ckitIframe = $('[data-ckit-iframe]');

        $("body").on("click", ".btn-toggle-ckit", function(e) { 
            alert("hi");
             $(ckitFull).removeClass("is-hidden");
             $(ckitCompact).addClass("is-hidden");
             $('body').addClass("disable-scrolling");
             $("html").css({"height": "100%", "overflow": "hidden"});
             $("body").css({"position": "relative"});
             e.preventDefault();
        });
    });

如果您仍然无法点击某个href,请尝试在iframe中添加一个css margin-top,而不是覆盖一个href。让我知道。

答案 3 :(得分:0)

如果您的html创建动态,那么您应该绑定click方法。

在附加你的html后写下这段代码。

示例: -

$('#buttonOuter').append('<input type="button" id="myid"/>');

$("#myid").unbind();
if($("#myid").length > 0 && $._data( $("#myid")[0], "events" )==undefined){
    $('#myid').bind('click',function(){
        // write your code
    });
}

我认为它为你工作