小编Mat*_*ell的帖子

jQuery遍历+实时事件处理程序

我在将实时事件处理程序附加到特定行时遇到了一些问题.


我拥有的和我所追求的:

我有一些HTML将在页面加载后动态生成,如下所示:

<table>
   <tr>
      <td></td>
   </tr>
   <tr>
      <td class="bonus"></td>
   </tr>
   <tr>
      <td></td>
   </tr>
 </table>
Run Code Online (Sandbox Code Playgroud)

我想有两个click活动:

  1. 一行不是"奖金行"
  2. 一个用于在它们之后具有"奖励行"的行

我尝试了什么和问题:

但是,我无法弄清楚如何使用选择器来选择"后面有特定元素的元素"(即"前一个"选择器).因此,我能得到的最好的是:

  1. 行不是"奖金行": $('tr:not(:has(.bonus))')
  2. 在他们之后有"奖金排"的行: $('tr + tr:has(.bonus)').prev()

这一切都很好,除非我live()在通过遍历获得的jQuery对象上使用该方法,而不是纯粹的选择,即

$('tr:has(.bonus)').prev().live('click', function() {
   alert('hello');
});
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

未捕获的异常:语法错误,无法识别的表达式:)


这个问题是一个更简单的例子:

我希望这本地化为我正在使用的一些脚本,但是我把它分离到了一个最小的jsFiddle示例,它仍然为我复制了这个问题:http: //jsfiddle.net/ptvrA/

HTML:

<div></div>
<div id="target"></div>
Run Code Online (Sandbox Code Playgroud)

JS:

$('#target').prev().live('click', function () {
   alert('f');
});
Run Code Online (Sandbox Code Playgroud)

这个答案看来,这是一个已知的限制live.


我的解决方法

作为参考,我的解决方法是:

  1. 以某种方式标记后面有"奖励行"的行
  2. click将所有行绑定,然后检查处理程序中是否有"奖励行".

但是,如果我能得到一个"更好"的解决方案,即使出于好奇,如果我在不同的情况下遇到这个问题,我也会很感激.

干杯

jquery jquery-selectors

5
推荐指数
1
解决办法
271
查看次数

MVC预览4 - 路由表中的路由与提供的值不匹配

我有一个我通过RedirectToRoute调用的路由,如下所示:

return this.RedirectToRoute("Super-SuperRoute", new { year = selectedYear });
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

 return this.RedirectToRoute("Super-SuperRoute", new { controller = "Super", action = "SuperRoute", id = "RouteTopic", year = selectedYear });
Run Code Online (Sandbox Code Playgroud)

global.asax中的路由是这样的:

routes.MapRoute(
    "Super-SuperRoute", // Route name
    "Super.mvc/SuperRoute/{year}",  // URL with parameters
     new { controller = "Super", action = "SuperRoute", id = "RouteTopic" }  // Parameter defaults
);
Run Code Online (Sandbox Code Playgroud)

那么为什么我会收到错误:"路由表中没有路由与提供的值匹配."?

我看到selectedYear的类型是var.当我尝试使用int.Parse转换为int时,我意识到selectedYear实际上是null,这可以解释问题.我想下次我会更加注意断点处变量的值:)

asp.net-mvc asp.net-mvc-routing

4
推荐指数
1
解决办法
2909
查看次数

jQuery.ScrollTo/jQuery.SerialScroll水平滚动

我期待使用jQuery.SerialScroll(基于jQuery.ScrollTo)实现水平滚动.

我在这篇文章中讨论过,目前我正在使用liScroll进行连续水平滚动.

但是,现在我需要离散滚动,我让SerialScroll完美地用于垂直滚动.

出于某种原因,如果'axis'属性被指定为'x',则不会发生任何事情.

我甚无法获得从右向左滚动工作的SerialScroll示例.

我有这样的HTML:

<div id="pane">
   <div>Item 1</div>
   <div>Item 2</div>
   <div>Item 3</div>
</div>
Run Code Online (Sandbox Code Playgroud)

我有这样的jQuery,当轴为'y'时有效

 jQuery(function($) {
      var $pane = $('#pane');
      $pane.serialScroll({
          items: 'div',
          next: $pane, // the container itself will get bound
          duration: 2100,
          force: true,
          axis: 'x',
          step: 1, //scroll 1 news each time
          event: 'showNext' //just a random event name
       });

       setInterval(function() {//scroll each 12 seconds
          $pane.trigger('showNext');
       }, 12000);
   });
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

//编辑(接受答案)

对于那些出现的人来说,接受的答案摆脱了对"serialScroll"的需要(只需要scrollTo).高度不是必需的.一定要将$('scroller')更改为$('mywrap')或$(target.parent().parent()).您还可以像这样设置自动滚动:

 var …
Run Code Online (Sandbox Code Playgroud)

jquery serialscroll scrollto

4
推荐指数
1
解决办法
5万
查看次数

从RoR模型中获取两个随机元素

我正在尝试使用RoR进行简单的操作,而我在学习基础知识时遇到了一些麻烦.我最接近的背景是ASP.NET MVC,但我发现所有的RoR教程都关注rails真正擅长什么(脚手架的东西)而不是如何制作自己的动作并让他们用参数等来做事.在ASP.NET MVC中微不足道.

目前我正试图从模型中获取两个随机元素.

我想我正在处理某种类型的ActiveRecord集合?

我已经读过在集合/数组的某处有一个.rand方法,尽管其他地方认为rand只是一种获取随机数达到一定数量的方法.我甚至无法使用以下代码:

def index
    @items = Array.new(Item[0], Item[0])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @domain }
    end
end
Run Code Online (Sandbox Code Playgroud)

任何可以帮助解决这个问题的东西,理想情况下有助于从ASP.NET MVC到RoR的进一步修补,我们将非常感激.

ruby-on-rails

4
推荐指数
2
解决办法
2086
查看次数

为什么网站内容的两边通常都有间距?

我观察到许多网站在页面的两边留下了一些空格.它背后的原因是什么?它是网页设计标准的一部分吗?

html web

4
推荐指数
3
解决办法
3855
查看次数

有一个函数需要两个值,让f(x,y)== f(y,x),输出是否唯一?

我想知道是否有办法基于两个实体之间的关系生成密钥,关系a-> b的关键字与关系b-> a的关键字相同.

理想地,这将是散列函数,其接收任一关系成员但产生相同的输出,而不管成员被呈现的顺序如何.

显然你可以用数字做这个(例如add(2,3)相当于add(3,2)).对我来说问题是我不希望add(1,4)等于add(2,3).显然任何哈希函数都有重叠,但我的意思是缺乏独特性.

我的天真(和表现不受欢迎)的想法是:

function orderIndifferentHash(string val1, string val2)
{
  return stringMerge(hash(val1), hash(val2));
  /* String merge will 'add' each character (with wrapping).
     The pre-hash is to lengthen strings to at least 32 characters */
}
Run Code Online (Sandbox Code Playgroud)

language-agnostic encryption algorithm hash

4
推荐指数
1
解决办法
272
查看次数

为什么我的异步回调在同一个线程中运行?

我正在尝试使用FtpWebRequest异步调用(BeginGetResponse/ EndGetResponse).

但是,似乎回调来自BeginGetResponse与我的应用程序在同一个线程中运行,当我在印象中它将使用不同的(和线程池)线程.这意味着我的应用程序在继续之前阻止回调.

我已经设置了LINQPad概念验证如下:

"Starting".Dump();
Thread.CurrentThread.GetHashCode().Dump(); 
Thread.CurrentThread.IsThreadPoolThread.Dump();

IAsyncResult result = request.BeginGetResponse((ar) => 
{
     "Inside Callback".Dump();
     Thread.CurrentThread.GetHashCode().Dump();
     Thread.CurrentThread.IsThreadPoolThread.Dump();
     var resp = request.EndGetResponse(ar);
     "Callback Complete".Dump();
}, null);

"After Callback".Dump();
Run Code Online (Sandbox Code Playgroud)

这打印输出如下:

Starting
33
False
Inside Callback
33
False
Callback Complete
After Callback
Run Code Online (Sandbox Code Playgroud)

我期望的是这样的(假设回调花了足够长的时间来运行):

Starting
33
False
Inside Callback
44
True
After Callback // App continues despite callback running
Callback Complete
Run Code Online (Sandbox Code Playgroud)

回调在相同的应用程序线程上运行,这意味着如果回调中的某些内容需要很长时间(例如,引入Thread.Sleepfor参数),我的应用程序就会阻塞.这意味着我无法在请求上设置超时(例如,使用a ThreadPool.RegisterWaitForSingleObject).

我在这里错过了什么吗?

.net c# asynchronous .net-4.0

4
推荐指数
1
解决办法
1288
查看次数

在声明ASP.NET之前不能使用局部变量

我有一些像这样的代码:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save([Bind(Prefix="")]Person person)
{
    String s = person.property;
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

但它抛出错误:"在声明之前不能使用局部变量'person'.

我错过了什么简单的事情?

c# asp.net-mvc

3
推荐指数
1
解决办法
1万
查看次数

如何在JavaScript匿名函数中的声明时使用变量的值?

这是一个非常基本的问题,但......

我有一些像这样的代码

var arr = Array('blah.jpg','ha.jpg');
for (var i=0; i<array.length; i++)
{
    $('div#blah' + i).click(function() {
           $('img').attr('src', arr[i]); });
}
Run Code Online (Sandbox Code Playgroud)

这应该绑定div id="blah0"以将所有图像更改为'blah.jpg'单击时.同样,单击div id ="blah1"应将所有图像更改为'ha.jpg'.

但是,匿名函数将无法工作,因为它将在执行时使用'i'的值,即2.这意味着单击div将尝试将所有图像设置为arr [2] - 不存在元素(有趣的是不会在我的机器上抛出JS错误,但这是另一个故事......).

如何在声明时使用'i'的值创建匿名函数?

作为一个更简单的例子:

for (var i=0; i<10; i++)
{
    $('div#blah'+i).click(function() {
       alert(i)); });
}
Run Code Online (Sandbox Code Playgroud)

当我点击'blah0'时,这应显示'0',当我点击'blah1'等时,应该显示'1'等.

但是,默认情况下,无论点击哪个'blah',它都会显示'10'.

javascript jquery closures

3
推荐指数
1
解决办法
257
查看次数

动态获取 Func&lt;T,bool&gt; 调用的结果

我正在尝试根据满足特定标准来序列化某些内容。

为此,我最初的希望是在对象的属性上使用包含 lambda 表达式的属性。

但是,由于这是无法完成的,我决定在类中使用 Func<T,bool> 成员,并通过 property 属性传递此 Func 的类型(或第一个参数类型)和名称。例如:

Func<SomeObject, bool> func = (p => p.Value == 4);
[FuncAtt(typeof(SomeObject), "func")]
public SomeObject PropertyName { get; set;}
Run Code Online (Sandbox Code Playgroud)

在我的序列化器中,我需要调用此 Func<T, bool>。

假设我有一个类型 t,在本例中它等于 typeof(SomeObject),或更抽象地等于 typeof(T)。我还可以获取 Func<T,bool> 本身,但只能通过作为对象的反射来获取。

我天真的做法是这样的:

object func = typeof(MyClass).GetField(attribute.FuncName).GetValue(MyClassInstance);
Type funcType = typeof(Func<,>).MakeGenericType(attribute.Type, typeof(bool));

ParameterExpression p = Expression.Parameter(attribute.Type, objectToSerialize);
LambdaExpression l = Expression.Lambda(funcType, func, p); /* Won't work */
Run Code Online (Sandbox Code Playgroud)

但这会导致将 lambda 转换为委托的问题,这显然是错误的。

我尝试用这个来代替“func”:

(Expression)((Action)(() => func))
Run Code Online (Sandbox Code Playgroud)

但这依赖于 func 是方法调用而不是 lambda。

那么,有人能指出我正确的方向吗?

c# generics reflection lambda dynamic

3
推荐指数
1
解决办法
3496
查看次数