我在将实时事件处理程序附加到特定行时遇到了一些问题.
我拥有的和我所追求的:
我有一些HTML将在页面加载后动态生成,如下所示:
<table>
<tr>
<td></td>
</tr>
<tr>
<td class="bonus"></td>
</tr>
<tr>
<td></td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
我想有两个click活动:
我尝试了什么和问题:
但是,我无法弄清楚如何使用选择器来选择"后面有特定元素的元素"(即"前一个"选择器).因此,我能得到的最好的是:
$('tr:not(:has(.bonus))') $('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.
我的解决方法
作为参考,我的解决方法是:
click将所有行绑定,然后检查处理程序中是否有"奖励行".但是,如果我能得到一个"更好"的解决方案,即使出于好奇,如果我在不同的情况下遇到这个问题,我也会很感激.
干杯
我有一个我通过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,这可以解释问题.我想下次我会更加注意断点处变量的值:)
我期待使用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) 我正在尝试使用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的进一步修补,我们将非常感激.
我想知道是否有办法基于两个实体之间的关系生成密钥,关系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) 我正在尝试使用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).
我在这里错过了什么吗?
我有一些像这样的代码:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save([Bind(Prefix="")]Person person)
{
String s = person.property;
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
但它抛出错误:"在声明之前不能使用局部变量'person'.
我错过了什么简单的事情?
这是一个非常基本的问题,但......
我有一些像这样的代码
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'.
我正在尝试根据满足特定标准来序列化某些内容。
为此,我最初的希望是在对象的属性上使用包含 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# ×3
jquery ×3
asp.net-mvc ×2
.net ×1
.net-4.0 ×1
algorithm ×1
asynchronous ×1
closures ×1
dynamic ×1
encryption ×1
generics ×1
hash ×1
html ×1
javascript ×1
lambda ×1
reflection ×1
scrollto ×1
serialscroll ×1
web ×1