Javascript 允许用鼠标左键单击单元格,或按ctrl键打开对话框

Javascript 允许用鼠标左键单击单元格,或按ctrl键打开对话框,javascript,jquery,jeditable,Javascript,Jquery,Jeditable,更新:我仍然没有弄明白这一点,但看到了与我想做的相似的东西。尝试合并它,但不确定我是否正确,因为它需要单击两次(或按ctrl键单击两次)才能按我期望的方式运行 $(“div.wanttoedit”)。单击(函数(e){ 如果(e.ctrlKey){ $('div.wanttoedit')。addClass('non_edit')。removeClass('edit')。解除绑定('click.editable'); 警报(“按下Ctrl”); }否则{ 警报(“未按下Ctrl”); $('div

更新:我仍然没有弄明白这一点,但看到了与我想做的相似的东西。尝试合并它,但不确定我是否正确,因为它需要单击两次(或按ctrl键单击两次)才能按我期望的方式运行

$(“div.wanttoedit”)。单击(函数(e){
如果(e.ctrlKey){
$('div.wanttoedit')。addClass('non_edit')。removeClass('edit')。解除绑定('click.editable');
警报(“按下Ctrl”);
}否则{
警报(“未按下Ctrl”);
$('div.wanttoedit')。addClass('edit')。removeClass('non_edit');
$('.edit').editable('http://#request.host#/vp/metrics.cfc?method=updateMetrics&returnformat=plain');
}
});

#val(值显示)#

再次感谢您的帮助。谢谢


我对jquery/javascript/jeditable还很陌生,所以请友好且尽可能明确。:)

我有一个表,行标签=度量名称,列标签=月份。这些单元格包含相应的度量值。我希望能够单击鼠标左键并使度量值可编辑,但也能够按住ctrl键单击(或单击鼠标右键、按住shift键单击或其他),并能够输入缺少度量值的原因(如果是)。这两个东西在我的数据库中的两个不同的表中更新,但它们都链接回它们关联的度量单位id/名称和时间框架/月份

我已经能够通过表格对度量值进行单次左键编辑,但到目前为止,我还未能找到一种方法,使字段也允许对话框的另一个单击弹出窗口输入未命中信息

任何帮助都将被真诚地感谢,尤其是如果你能让这个相当简单的女孩容易理解的话

我正在使用Coldfusion(不确定这是否是必要的知识,但我想我只是为了以防万一才提到它),并且可以提供任何必要的代码片段,以便您帮助我修复此问题

这是我的代码示例,我使用jquery选项卡,因此可编辑的位置与平常不同(希望我包含了您需要查看的所有内容……如果不只是让我知道我可能缺少什么的话)

$(文档).ready(函数(){
$(“#cymteamtabs”).tabs({
缓存:false,
加载:函数(事件,用户界面){
$(“.editMetric”).editable(“http://#request.host#/vp/metrics.cfc?method=updateMetrics&returnformat=plain”);
},
ajaxOptions:{cache:false}
}
))



#metrics.mdisplay


#val(值显示)#


哦,只是为了确保我清楚地知道我想要它做什么……如果我按住ctrl键单击该字段,将出现弹出窗口,允许输入未命中信息(编辑被禁用)。一旦该对话框关闭,如果我左键单击该字段,它将启用该字段的编辑。因此,基本上,我不想完全关闭该表,我只希望在用户ctrl键单击该字段和由于该字段而弹出的对话框关闭之间,该对话框进入休眠模式


提前谢谢。

我唯一能想到的排序方法是有点小技巧。 似乎无论如何都不需要对事件运行条件,所以我建议设置两种事件类型,并在按下ctrl键时在它们之间切换

问题在于事件类型-解除它们的绑定似乎有点过分。 最好的选择是将可编辑元素设置为
,但要使用单独的元素(如span)作为触发器

要继续使用当前html,您可以尝试以下方法:

$('.editMetric').editable('url1', {
    event: "nrmlClick"
}).editable('url2', {
    event: "ctrlClick"
}).bind('toggleClick', function(e) {
    if (e.ctrley) {
       /* modal javascript here */
       $(this).trigger('ctrlClick')
    } else {
        $(this).trigger('nrmlClick')
    }
});​
我没有适当的设备来测试这个,但是这个应该可以工作

我以前从未编造过活动名称,所以我不知道这是一个多么好的想法(希望有人能启发我们),但我现在看不出它的危害


希望这会有所帮助!

我不确定这是否是最好的方法,也不确定它是否正在做我希望它做的事情,但到目前为止它似乎起到了作用

$(document).ready(function()
{
$("#cymteamtabs").tabs(
    {
    cache: false,
    ajaxOptions: {cache: false},
    load: function(event,ui)
        {
        $(".editMetric").click(function(e) {
            if (e.ctrlKey) {
                var metric_id = $(this).attr('data-metric-id');
                var date_type = $(this).attr('data-date-type');
                var value_date = $(this).attr('data-value-date');
                var url_tf = 'cym';
                var url_view = 'edit';
                scorecards.display.miss_details(metric_id,date_type,value_date,url_tf,url_view);
                e.stopImmediatePropagation();
            }
        });
        $(".editMetric").editable("http://<cfoutput>#request.host#</cfoutput>/vp/metricCFComponents.cfc?method=updateMetrics&returnformat=plain");
        }
    });
});
$(文档).ready(函数()
{
$(“#cymteamtabs”).tabs(
{
cache:false,
ajaxOptions:{cache:false},
加载:函数(事件、用户界面)
{
$(“.editMetric”)。单击(函数(e){
如果(e.ctrlKey){
var metric_id=$(this.attr('data-metric-id');
var date_type=$(this.attr('data-date-type');
var value_date=$(this.attr('data-value-date');
var url_tf='cym';
var url_view='edit';
记分卡.显示.未命中详细信息(度量id、日期类型、值日期、url tf、url视图);
e、 停止即时复制();
}
});
$(“.editMetric”).editable(“http://#request.host#/vp/metricCFComponents.cfc?method=updateMetrics&returnformat=plain”);
}
});
});

这似乎首先检查ctrl单击,如果按下,则运行不可删除的代码并执行e.stopImmediatePropagation();似乎不允许下面的可编辑代码运行。

请提供代码的相关示例,和/或,如果可能。这很好,但是,正常单击当然会使单击的字段(度量值)可编辑,但ctrl单击必须弹出一个对话框,其中包含一个完全不同的字段(度量未命中原因)在触发“第二个”可编辑事件之前,是否可以通过某种方式包含启动弹出对话框的代码?顺便说一句,非常感谢您的帮助。:)是的,那应该很好,但是我不知道你的模态是如何设置的-它是一个完全重复的表吗?你需要做的就是创建模态元素并绑定
.editable