Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.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
Javascript 我如何获得Wordpress';预览';要在同一窗口中打开的链接?_Javascript_Jquery_Html_Wordpress - Fatal编程技术网

Javascript 我如何获得Wordpress';预览';要在同一窗口中打开的链接?

Javascript 我如何获得Wordpress';预览';要在同一窗口中打开的链接?,javascript,jquery,html,wordpress,Javascript,Jquery,Html,Wordpress,我在Wordpress堆栈交换上问过,但对于堆栈溢出来说,这可能是一个更好的问题,因为它与编码更直接相关 Wordpress有一个框,允许您保存、预览和发布您的博客帖子: “预览”按钮实际上是一个按钮样式的链接: <a tabindex="4" id="post-preview" target="wp-preview" href="/?p=67&amp;preview=true" class=&quo

我在Wordpress堆栈交换上问过,但对于堆栈溢出来说,这可能是一个更好的问题,因为它与编码更直接相关

Wordpress有一个框,允许您保存、预览和发布您的博客帖子:

“预览”按钮实际上是一个按钮样式的链接:

<a tabindex="4" id="post-preview" target="wp-preview"
href="/?p=67&amp;preview=true" class="preview button">Preview</a>
这就是如何将代码转换为主题或插件:

// set up an action to set a function to run in the wp admin_footer
add_action('admin_footer','my_admin_footer_script',9999);
下面是添加javascript的函数:

//this function can then be used to add javascript code to the footer

function my_admin_footer_script(){ ?>
    <script type="text/javascript">
    jQuery(function($){
     (above js code here)
    });
    </script>


    <?php
}
//然后可以使用此函数将javascript代码添加到页脚
函数my_admin_footer_script(){?>
jQuery(函数($){
(上面是js代码)
});
你可以试试这个:

jQuery('.preview.button').click(function(e){
    window.location.href = this.href;
    return false;
});

从Chrome Inspector开始工作。

语法正确,但计时很重要。如果只执行第一部分而不执行第二部分,则可能无法工作,因为绑定到此元素的事件似乎存在延迟

如果还包括第二部分,即在加载页面后等待500毫秒运行,那么它似乎可以按预期工作

add_action('admin_footer','preview_same_window');

function preview_same_window(){ ?>
    <script type="text/javascript">

    jQuery(function($){

      //first part
      jQuery('.preview.button').unbind().removeAttr('target');

      //second part
      setTimeout(function(){
       jQuery('.preview.button').unbind().removeAttr('target');
      },500);


    });

    </script>
    <?php
}
add_action('admin_footer','preview_same_window');
函数预览\相同\窗口(){?>
jQuery(函数($){
//第一部分
jQuery('.preview.button').unbind().removeAttr('target');
//第二部分
setTimeout(函数(){
jQuery('.preview.button').unbind().removeAttr('target');
},500);
});

如果他们使用事件委派,您将无法使用数据('events')技巧。我还认为较新版本的jQuery可能已经消除了这一点。但是unbind应该仍然可以工作,因为它是一个本机函数,对吗?根据jQuery文档:
$('#foo')。unbind();//此版本将删除处理程序,而不考虑其类型。
如果使用委托,则取消绑定将不起作用,因为实际上没有事件绑定到该元素。委托的工作方式是,它们侦听DOM中更高级别的事件,然后查询事件对象以查看其来源。如果您可以确定eve来自哪个元素nt一定会,你可以使用undelegate。无论如何,这纯粹是我的猜测。我不确定他们是否使用了委托。如果你有任何关于在jQuery中查找委托事件的提示,请将其作为答案发布:)我将查找
undelegate
,但也许我可以使用
.parent()进行循环
并运行
取消授权
进行测试。我认为这不再重要,因为你有答案了-但这是我在检查链接元素时看到的-对我来说也很有用。很好的KennisThank谢谢你。这是一个有趣的解决方案,看起来有点像黑客,但它确实有效,并且确实回答了我发布的问题。尽管如此我仍然很想知道为什么标准方法不起作用,以及如何找到委派的事件侦听器。只是尝试了不同版本的Google Chrome,结果显示
jQuery('.preview.button').unbind().removeAttr('target')
现在可以工作了。。。
add_action('admin_footer','preview_same_window');

function preview_same_window(){ ?>
    <script type="text/javascript">

    jQuery(function($){

      //first part
      jQuery('.preview.button').unbind().removeAttr('target');

      //second part
      setTimeout(function(){
       jQuery('.preview.button').unbind().removeAttr('target');
      },500);


    });

    </script>
    <?php
}