小编JMa*_*Man的帖子

为什么我发现Javascript/jQuery如此难以正确?

我的背景是在C中,我已经选择了PHP,mySQL,HTML,CSS而没有太多问题.

但我发现Javascript/jQuery难以正确使用.很沮丧.为什么?

  1. 它似乎违反了许多传统的编程原则(例如可变范围)

  2. 未定义的变量似乎无处不在,并且已经存在与它们相关联的值.例如(来自jQuery文档):

    $("a").click(function(event) {
        event.preventDefault();
        $('<div/>')
              .append('default ' + event.type + ' prevented')
              .appendTo('#log');
    });
    
    Run Code Online (Sandbox Code Playgroud)

    什么是"事件"?我必须使用此变量名称吗?我应该假设这个对象是用正确的东西神奇地实例化的,我可以使用JQuery API中的任何方法列表吗?

  3. 似乎有一堆随机规则(例如,返回false以停止默认操作,但有时这不起作用?)

  4. 调试时的非确定性行为.(例如,我刷新浏览器,尝试一些东西并获取结果X用于我在Firebug中观看的JS变量.我再次刷新,我得到结果Y?)

  5. 非常混乱的代码很难遵循.什么时候发生?我正在使用Firebug和Chrome开发者工具,但我没有获得足够的可见度.

似乎每天都有一些随机的JS"规则"出现在我的任何JS书籍或教程中我从未见过.

我需要做些什么才能使Javascript/jQuery对我更具确定性,控制性和逻辑性?

有没有资源可以解释Javascript的怪癖/陷阱?

谢谢!

javascript jquery

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

IE8中的垂直对齐不正确

我的搜索框中的默认文字在Chrome,FF和Safari中看起来很好(vertical-align:middle).

但是,默认文本会出现在IE 8中搜索框的顶部.

IE有解决方法吗?谢谢你的帮助.

HTML:

<input type="text" class="text" value="Search" title="Search" />
Run Code Online (Sandbox Code Playgroud)

CSS:

.text {
    height: 47px;
    font-size: 18px;
    margin: 0; 
    padding: 0 5px 0 45px;
}
Run Code Online (Sandbox Code Playgroud)

css internet-explorer-8

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

Facebook对象调试器:属性'og:url'无法解析为类型'url'

当我通过对象调试器运行我的Facebook Open Graph对象(http://www.21dads.com/testobject)时,我收到以下错误:

对象无效值:'thetestasdf:recipie'类型的URL'http://www.21dads.com/testobject'上的对象无效,因为属性'og:url'的给定值'www.21dads.com/testobject'可以不被解析为类型'url'.

缺少必需属性:og:url属性是必需的,但不存在.

缺少必需属性:og:type属性是必需的,但不存在.

缺少必需属性:og:title属性是必需的,但不存在.

这是对象页面上的HTML:

<html xmlns="http://www.w3.org/1999/xhtml">

    <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# thetestasdf: http://ogp.me/ns/fb/thetestasdf#">
      <meta property="fb:app_id"      content="325291980834949" />
      <meta property="og:type"        content="thetestasdf:recipie" />
      <meta property="og:url"         content="www.21dads.com/testobject" />
      <meta property="og:title"       content="Cookie Recipie!" />
      <meta property="og:description" content="Tastiest recipe ever" />
      <meta property="og:image"       content="http://cdn.techpatio.com/wp-content/uploads/2009/11/cookie_law_eu.gif" />
      <title> Cookie Recipie</title>
    <head/>

    <body>
        <p> Test object page </p>
    </body>

</html>
Run Code Online (Sandbox Code Playgroud)

URL"www.21dads.com/testobject"是我的控制器,然后从视图文件生成HTML.为什么不能解析此URL?

为什么我已经包含其他"缺少必需属性"错误?

谢谢.

facebook-opengraph

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

Facebook FB.login适用于Safari,但不适用于移动Safari

以下FB.Login功能在桌面Chrome,FF和Safari中正常工作.但是在移动版Safari中(在iPhone 4S上测试过),它会挂起并且不会返回到FB.login回调.当我使用Safari并将用户代理设置为"Safari iOS 4.3.3 - iPhone"时,我也可以在控制台中看到这一点.

是因为移动Safari阻止弹出窗口?(FB.login触发弹出对话框).

我该如何解决?谢谢.

function Login(returnLink) {
        FB.login(function(response) {
                    if(response.status === 'connected') {
                        console.log('User is now FB logged in.');
                        // now log them into my site
                        encodedReturnLink = encodeURIComponent(returnLink);
                        window.location = location.protocol + '//' + location.host + "/login?returnUrl=" + encodedReturnLink;
                    }
                    else {
                        console.log('User did not fully authorize after clicking FB login button.');
                    }
                },
                {scope : 'email, publish_actions, publish_stream'}
        );
}
Run Code Online (Sandbox Code Playgroud)

javascript facebook mobile-safari facebook-javascript-sdk

10
推荐指数
2
解决办法
5555
查看次数

如何使用jQuery访问HTML5视频方法?

我正在编写一个HTML5应用程序,我正在尝试访问本机视频方法(播放,暂停等...)并使用jQuery.我不想使用任何其他插件.

var movie = $('#video_with_controls');

$('#buttonX').click(function() {
            movie.play();
      });
Run Code Online (Sandbox Code Playgroud)

但是当我执行上面的代码时,我收到以下控制台错误消息:

Object has no method 'play'
Run Code Online (Sandbox Code Playgroud)

我该如何解决?谢谢.

jquery html5

7
推荐指数
1
解决办法
4992
查看次数

如何通过移动设备访问Apache虚拟主机?

在用主机名“ server1”和“ server2”设置Apache虚拟主机后,由于无法在iOS或Android中修改/ etc / hosts文件,我将如何用我的iPhone(或任何移动设备)访问它们?

我的理解是,您必须按名称引用虚拟主机(假设您的物理服务器上只有1个IP地址),但是无法将这些虚拟主机名映射到我的物理服务器上的单个IP地址。

我正在使用MAMP在笔记本电脑上运行服务器,而我的Vonage路由器/ Apple Airport不支持DNS。我需要设置本地DNS服务器吗?有什么简单的方法可以在笔记本电脑上运行它吗?谢谢。

apache dns

7
推荐指数
2
解决办法
9925
查看次数

我应该在Ruby on Rails中重写我的Codeigniter/PHP应用程序吗?为什么?

我已经在Codeigniter/PHP中编写了我的webapp v1.我现在正在研究v2,它将对所有MVC组件进行一些重大更改.

我很喜欢CI,我喜欢它.像我这样的C编码器非常直观.但我想知道在Rails中重写应用程序是否值得?生产力的提高是否值得从头开始学习另一个框架的成本?我想要实用而不是追逐某些东西只是因为它更酷或更有趣.

以下是一些生产力标准:

  • HTML和CSS生成相当费力.Rails有什么独特之处可以帮助解决这个问题吗?

  • 我想重用其他人的代码来实现常用的功能(例如与FB,Twitter和其他社交网站的接口).使用Rails可以获得多少第三方代码重用?

  • 我从Rails社区与CI社区获得了多少好处?

  • 使自动化测试更容易.我今天手动测试,这是劳动密集型的.

我会感谢特定的利益与理想主义/宗教论点.谢谢!

php codeigniter ruby-on-rails

6
推荐指数
1
解决办法
2209
查看次数

$ .post始终返回undefine

当我进行以下jQuery调用时

$.post('/publish/comments', 
  parms,
  function(data, textStatus){
    console.log('textStatus: ' . textStatus);
    console.log('returned data: ' . data);
    console.log('nextPage: ' . data.nextPage);
  },
  "json"
); 
Run Code Online (Sandbox Code Playgroud)

控制台显示数据,textStatus和data.nextPage都是未定义的.

但是在Chrome开发工具(网络标签)中,我可以看到以下JSON数据正从服务器传回.

{success:true, nextPage: /go/page/requestId/182/src/publish}
nextPage: "/go/page/requestId/182/src/send"
success: true
Run Code Online (Sandbox Code Playgroud)

思考?

ajax jquery callback

2
推荐指数
1
解决办法
86
查看次数

jQuery .not()方法无法正常工作

我试图让所有textareas删除焦点上的默认文本,除了 "预填充"类.但问题是仍然正在选择和包括"预填充"类的文本.

关于如何解决这个问题的建议?谢谢.

jQuery(document).ready(function inputHide(){

    $('textarea, input:text, input:password').not($('.pre-fill')).focus(function() {
            if ($(this).val() === $(this).attr('defaultValue')) {
                $(this).val('');
            }
        }).blur(function() {
            if ($(this).val()==='') {
                $(this).val($(this).attr('defaultValue'))
            }
        });

});
Run Code Online (Sandbox Code Playgroud)

javascript jquery

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

jQuery .html().长度没有返回正确的值

我正在尝试1)当用户关注它时删除textarea中的默认文本.2)如果他没有输入任何内容并点击,则应重新插入默认文本.

下面的代码处理案例#1,但Chrome和Safari(但不是Firefox)中的案例#2失败了.当我输入文本(所以$(this).html().length> 0)然后单击时,jQuery错误地确定$(this).html().length == 0,因此它删除了输入的文本和重新插入默认文本.

jQuery(document).ready(function inputHide(){
    $('textarea').each(function(){
        var this_area = $(this);
        var this_area_val;

        this_area_val = this_area.html();
        this_area.focus(function(){
            if(this_area.html() == this_area_val){
                    this_area.html('');
            }
        }).blur(function(){
            if(this_area.html().length == 0){
                this_area.html(this_area_val);
            }
        }); 
    });
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

jquery

0
推荐指数
1
解决办法
4831
查看次数