【问题标题】:How to use this in selector in jquery如何在 jquery 的选择器中使用它
【发布时间】:2016-02-19 20:24:16
【问题描述】:

我正在编写一个 Jquery 插件,我需要将其用作选择器。但它不起作用。

插件代码如下:

$.fn.submitNow=function(onSuccess){
    var thisElement=this;
    $(document).on('submit',this,function(e){
        e.preventDefault();
        $.get($(this).attr('action'),function(data){
            onSuccess.call(thisElement, data);
        });
    });
}

这里是 html sn-p (nb.动态创建):

<form action="demoLink" class="chosen-form">
    <input name="code" type="text">
    <button type="submit">Submit</button>
</form>

代码如下:

$('.chosen-form').submitNow(function(data){
    alert(data);
});

我的猜测是 this 作为 on() 函数中的参数不能使用。如何在 on() 函数中将 this 作为选择器传递?

【问题讨论】:

  • 真的没有理由使用事件委托,因为你初始化插件的方式必须在那个时候存在元素
  • 究竟是什么不工作?是否抛出错误?是否进行了ajax调用?您是否考虑过一些错误处理?您的陈述“它不起作用” 不是正确的问题描述
  • this 没有通过 on() 函数。因此选择了整个 document 而不是表单。
  • 对...因为on() 只接受字符串作为目标选择器,但您不需要首先委托...使用$(this).submit(...。您打算在多个表单上使用它吗?
  • 如果您确实需要委托,则需要更改整个插件

标签: javascript jquery html jquery-plugins


【解决方案1】:

我不明白你的插件会做什么,但回答你的问题:

根据 Jquery 文档,选择器参数必须是字符串。

http://api.jquery.com/on/

[选择器]

类型:字符串

一个选择器字符串,用于过滤触发事件的选定元素的后代。如果选择器为 null 或省略,则始终在到达所选元素时触发事件。

【讨论】:

  • 有没有办法让字符串选择器形成 this
【解决方案2】:

如果动态创建表单,则不能使用$(selector).widgetName() 绑定处理程序。您应该只使用一个将选择器作为参数的普通函数。

$.submitNow=function(selector, onSuccess){
    $(document).on('submit',selector,function(e){
        e.preventDefault();
        $.get($(this).attr('action'),function(data){
            onSuccess.call(this, data);
        });
    });
};

那你称它为:

$.submitNow('.chosen-form', function(data) {
    alert(data);
});

【讨论】:

    猜你喜欢
    • 2011-12-26
    • 2011-05-17
    • 1970-01-01
    • 2011-03-01
    • 2012-03-07
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多