如何防止表单提交

时间:2012-05-18 12:43:37

标签: knockout.js sammy.js

我在一个页面应用程序中使用KnockoutJS和SammyJS。

在html我有表格标签如下

<form data-bind='submit: search'>
  <label>Find user:</label>
  <input data-bind='value: name' />
</form>

并在我的viewmodel中声明了两个函数和sammy route url

function ViewModel() {
    var self = this;
    self.name = ko.observable("");
    self.search = function () {
      alert(self.name);
    };

    Sammy(function () {
        this.get('#:id', function () {
           //do something....
        });           
    }).run();
}

ko.applyBindings(new ViewModel());

所有代码都运行良好,直到我在文本框中键入内容然后提交表单。 我预计在警告窗口之后没有网址浏览,但网址会更改为“http:// localhost:8258 / undefined?” 我原来的网址是“http:// localhost:8258”

我怀疑sammy url路由,所以从javascript代码中删除了sammy代码,然后在警告窗口后url不会更改。 也许我不明白萨米是如何运作的。

如何防止网址改变这种情况?

2 个答案:

答案 0 :(得分:5)

Sammy将自己绑定到表单,以便您也可以为它们注册路由。

<form action="#1234" method="post">

JS:

Sammy(function() {
    this.post('#:id', function() {
        // do something...

        return false; // avoid form submission
    });

    // ...
}).run();

答案 1 :(得分:3)

我也有这个问题,我在this answer找到了一个解决方案。以下是你如何让Sammy.js单独留下表格:

Sammy(function() {

    // Your routing.. 
    this.get('#:id', function () {
       //do something....
    }); 


    // Make Sammy.js leave the forms alone!
    this._checkFormSubmission = function(form) {
        return false;
    };

}).run();

应该这样做:)