JQuery .bind() 正确格式

发布于 2024-12-03 21:36:55 字数 1442 浏览 1 评论 0原文

我有这段代码 -

jQuery('.wymeditor').wymeditor( {
    html: '<p>Hello, World!<\/p>',
    postInit: function(wym) {
         var html = "<li class='wym_tools_newbutton'>"
                 + "<a name='NewButton' href='#'"
                 + " style='background-image:"
                 + " url(js/wymeditor/img/media.png);'"
                 + " title='Insert an image' >"
                 + "</a></li>";
       jQuery(wym._box).find(wym._options.toolsSelector + wym._options.toolsListSelector).append(html);
       jQuery(wym._box).find('li.wym_tools_newbutton a').click(function() {

       jQuery('#modal').show().css( { 'left': (winW-980)/2+'px', 'top': '100px' } ).load('admin_list_media.php');

                jQuery('.imgname').bind('change',function(){

                alert('123');

                var InsertImg = '#'+jQuery(this).attr('id');

                wym.insert('<img src="uploads/'+jQuery(InsertImg).val()+'" />');

                jQuery('#modal').empty().hide();

             });
            return(false);
            } );
            }
        } );

它将一个新按钮添加到 wym 编辑器。这将打开一个包含图像的模式,其想法是选择一个图像并插入到 wym 编辑器中。如果我使用 jQuery('.imgname').live('change',function(){ ... 则有效,但如果我使用 jQuery('.imgname').bind( 'change',function(){ 问题是我必须使用 .bind() 因为每次模式打开时更改事件处理程序都会绑定,因此每次被告知替换 .live( 时我都会插入重复图像) 和.bind() 但它不起作用(请在我的代码中提出建议)。

I have this code -

jQuery('.wymeditor').wymeditor( {
    html: '<p>Hello, World!<\/p>',
    postInit: function(wym) {
         var html = "<li class='wym_tools_newbutton'>"
                 + "<a name='NewButton' href='#'"
                 + " style='background-image:"
                 + " url(js/wymeditor/img/media.png);'"
                 + " title='Insert an image' >"
                 + "</a></li>";
       jQuery(wym._box).find(wym._options.toolsSelector + wym._options.toolsListSelector).append(html);
       jQuery(wym._box).find('li.wym_tools_newbutton a').click(function() {

       jQuery('#modal').show().css( { 'left': (winW-980)/2+'px', 'top': '100px' } ).load('admin_list_media.php');

                jQuery('.imgname').bind('change',function(){

                alert('123');

                var InsertImg = '#'+jQuery(this).attr('id');

                wym.insert('<img src="uploads/'+jQuery(InsertImg).val()+'" />');

                jQuery('#modal').empty().hide();

             });
            return(false);
            } );
            }
        } );

which adds a new button to a wym editor. This opens a modal which contains images, the idea is to select an image and insert into the wym editor. Works if i use jQuery('.imgname').live('change',function(){ ... but not if I use jQuery('.imgname').bind('change',function(){ problem is I have to use .bind() because the change event handler gets bound every time the modal opens and so I dupliacte image inserts each time I was told to replace .live() with .bind() but it doesn't work (OK in my code). Suggestions please

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

远昼 2024-12-10 21:36:55

首先:为什么不使用live,而是在页面加载时使用一次?你说“我必须使用 bind 因为事件处理程序每​​次都会被绑定......”但这听起来令人困惑。每次因为您使用bind,事件处理程序都会被绑定,而不是相反。

如果做不到这一点,一个快速而肮脏的解决方案将是:

$(".imgname").unbind("change").bind("change", function () {
    // ...
});

一个更好的解决方案(同样,没有 live)将是 hasEventListener 插件。阅读文档,或使用 JSFiddle 上的沙箱

First of all: why don't you use live but do it once when your page loads? You say "I have to use bind because the event handler gets bound every time..." but that sounds confusing. The event handler gets bound every time because you use bind, not the other way around.

Failing that, a quick and dirty solution would be:

$(".imgname").unbind("change").bind("change", function () {
    // ...
});

A much better solution (again, without live) would be the hasEventListener plugin. Read the documentation, or play with its sandbox on JSFiddle.

寒江雪… 2024-12-10 21:36:55

通过将插入移到 onchange 部分之外解决了这个问题

Solved it by moving the insert outside of the onchange section

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文