jQuery - 专注于TR

时间:2011-12-07 04:57:14

标签: jquery tablerow focusout

好的,所以我正在制作一个插件,允许在我的网站中对表进行内联编辑,到目前为止一直很好,我已经完成了大部分工作,但我似乎无法将焦点从桌面上移开。因此,如果有人完成编辑并开始编辑新行或只是点击该行,它应该保存并恢复正常。但是如果我在行上使用模糊,则没有响应,但如果我在元素上使用模糊,则当人们从一个元素交换到另一个元素时会触发

但是如果我在行上使用焦点,只要有人离开元素,即使他们点击同一行,它也会触发。在事件变量下没有任何东西告诉我它关注的是什么元素,所以我无法与当前行进行比较,看看它们是否只是在行中点击。

我正在考虑将其保存在Enter / Mouse上单击以保存按钮/开始编辑另一行,但我宁愿让它工作,因为它似乎是一种更好的方法。有人想过吗?请?

3 个答案:

答案 0 :(得分:3)

我会通过绑定整个文档的单击处理程序,然后在其他单击事件中添加stopPropagation()调用来处理您的请求。我设置了一个小提琴演示:http://jsfiddle.net/NwftK/

<table border="1" width="200">
    <tr id="myRow"><td>Hello</td><td>World</td></tr>
</table>

和jQuery:

$(function () {
    $("#myRow").on('click', function (e) {
       $(this).css('background-color', 'blue');
        e.stopPropagation();
    }); 

    $(document).on('click', function () {

       $("#myRow").css('background-color', 'red');
    });

});

答案 1 :(得分:1)

问题是,即使你有嵌套元素,当你关注其中一个子元素时,focusout也会在父元素上触发。我能想到的解决方案是使用变量跟踪当前行。伪代码可能是这样的:

var row = '';
$(table_element).click(function() { 
                           focused_row = $(this).parent();
                           if(row != '' && focused_row != row) {
                               //code to save edits, user clicked different row
                           }
                           row = focused_row;
                       });

答案 2 :(得分:0)

有两种情况需要检测行何时失去焦点,一方面是你在桌子内,一方是你离开桌子时。

您可以尝试这样的事情:

import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Color;
import android.graphics.Typeface;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class LanguageAdapter<T>  extends ArrayAdapter<T>
{
    AssetManager mngr;
    public LanguageAdapter(Context ctx, T [] objects)
    {
        super(ctx, android.R.layout.simple_spinner_item, objects);
            mngr = ctx.getAssets();

    }

    //other constructors

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent)
    {
        View view = super.getView(position, convertView, parent);

        //we know that simple_spinner_item has android.R.id.text1 TextView:         


        Typeface faceAkshar = Typeface.createFromAsset(mngr,"akshar.ttf");

            TextView text = (TextView)view.findViewById(android.R.id.text1);
            text.setTypeface(faceAkshar);
            text.setTextSize(24);
            text.setTextColor(Color.RED);//choose your color :)         

        return view;

    }
}