【问题标题】:how to refresh a 'div' anytime an element in the page is clicked - jquery单击页面中的元素时如何刷新'div' - jquery
【发布时间】:2023-03-23 01:56:02
【问题描述】:

我想在任何表单元素上有点击事件时重新加载一个元素。任何人都可以帮助我使用 jquery 语法吗? 像

function addClickHandlers() { $.publish('refreshDiv'); }

div 的 reloadTopic 设置为 refreshDiv

谢谢

【问题讨论】:

  • reload怎么理解?应该插入新的 html 数据吗?是否应该删除布局,添加? ...

标签: jquery publish-subscribe


【解决方案1】:

点击事件会冒泡,所以你可以在表单元素上设置事件:

$('#myForm').click(function () {
    $.publish('refreshDiv'); 
});

您也可以使用.delegate() 仅捕获来自表单中某些元素的点击:

$('#myForm').delegate("input, select, textarea", "click", function () {
    $.publish('refreshDiv'); 
});

【讨论】:

  • 如果有许多表单包含这个特定的 div 并且我希望它在任何一个表单中单击某些内容时重新加载?这当然意味着我有一些文件包含在所有这些页面中,并且该脚本位于该文件中
  • 我在 jQuery 中没有看到任何 publish 方法,是插件还是什么?
  • @sAc:我认为是,问题中没有足够的细节来说明其他情况。
  • @abs:用更合适的选择器替换$('#myForm'),例如$('form');,它将针对所有表单。
  • 我想我只会使用计时器来发布它 - 似乎不适用于表单内的元素,谢谢 Andy E
【解决方案2】:

为每个元素添加一个处理程序。

$('*').click(function () {
    $.publish('refreshDiv'); 
    return false; // to stop it from bubbling as we already handled it here.
});

【讨论】:

  • 使用通用选择器 * in 是不好的因果报应,如果你这样做,john resig 的精神可能会来找你!
  • 将点击处理程序应用于 DOM 中的 每个 元素也是非常低效的。
【解决方案3】:

我对发布一无所知,我从未在 jquery 中看到过这种代码,但如果你想重新加载整个页面,那么你可以关注

<button id="PageRefresh">Refresh a Page in jQuery</button>

<script type="text/javascript">

    $('#PageRefresh').click(function() {

              location.reload();

    });

</script>

如果你想重新加载特定的 div,那么我认为你应该在 jquery 中使用 ajax 并在 div 中重新加载 html。

$.post("/page", frm.serialize(), function(data) {
                    $("#ReminderProjectCount").html(data);
            });

【讨论】:

    【解决方案4】:

    嗯,我可以用两种方式解释你的文字:

    1) 在表单元素的子元素上执行$.publish

    $('form').children().click(function(){
       $.publish('refreshDiv');
    });
    

    2) 对所有form elements 执行$.publish(如checkboxes, radio buttons, etc.

    $('form').find('input').click(function(){
       $.publish('refreshDiv');
    });
    

    就像 Andy E. 建议的那样,它对delegate 的点击事件有更好的性能,所以更少的event handlers 被绑定。

    3)

    $('form').delegate('input', 'click', function(){
       $.publish('refreshDiv');
    });
    

    【讨论】:

    • 您可以使用 delegate() 获得更高效的2)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多